2012-03-16 57 views
2

我正在從教程中設計一個簡單的應用程序,我已經看到,我試圖簡單地在列表視圖,名稱和價格的每一行中顯示兩個文本視圖。這工作,我可以選擇行,它會激活一個意圖。然而,我然後改變了我的xml代碼,以便listview將被放置在linearLayout中,以便我在屏幕頂部有一個標題。現在,當我點擊任何行時,它們會突出顯示,但沒有其他事情發生。我已經嘗試在xml中將textviews設置爲clickable = false,但仍然沒有運氣。我希望我只是在onCreate方法中缺少一些簡單的東西。 `公共類ViewMenuListing擴展ListActivity {LinearLayout中的ListView不再反應OnclickListener

public static final String ROW_ID = "row_id"; // Intent extra key 
private ListView contactListView; // the ListActivity's ListView 
private CursorAdapter contactAdapter; // adapter for ListView 
private String tableName; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    contactListView = getListView(); // get the built-in ListView 
    contactListView.setOnItemClickListener(viewContactListener); 

    setContentView(R.layout.viewmenu); 

    //Get table name of menu clicked. 
    Bundle extras = getIntent().getExtras(); 
    tableName = extras.getString("table"); 

    // map each contact's name to a TextView in the ListView layout 
    String[] from = new String[] { "name", "price" }; 
    int[] to = new int[] { R.id.itemTextView, R.id.priceTextView }; 
    //int[] to = new int[] { R.id.itemTextView}; 

    contactAdapter = new SimpleCursorAdapter(
      ViewMenuListing.this, R.layout.menu_list_item, null, from, to); 
    setListAdapter(contactAdapter); // set contactView's adapter 
}` 

我在這段代碼中唯一改變的是,我用的setContentView(R.layout.viewmenu)現在,當我之前didnt和名單將只是內容視圖。

這裏是我的viewMenu文件:

`

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 
    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/hello" /> 
    <ListView 
     android:id="@+id/android:list" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"/> 
</LinearLayout>` 

和我menu_list_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/itemTextView" 
     android:padding="8dp" 
     android:clickable = "false" 
     android:textSize="20sp" android:textColor="@android:color/white" 
     android:minHeight="?android:attr/listPreferredItemHeight" 
     android:gravity="center_vertical"> 
    </TextView> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/priceTextView" 
     android:clickable = "false" 
     android:textColor="@android:color/white"/> 
</LinearLayout> 

謝謝您的幫助!

+0

所以基本上,當你移除父LinearLayout(不修改任何其他),它的作品?當你定義一個單獨的ListView – Soham 2012-03-16 04:13:21

+0

是的時候,爲什麼還要使用ListActivity?當我註釋掉setContentView的時候。說實話,我正在接受一個教程。我想這是一個壞的! – 2012-03-16 04:18:50

回答

2

看起來好像你明確地爲你的ListView設置了一個onItemClickListener。這並不是必需的,因爲您正在擴展ListActivity,並且ListActivity有一個可覆蓋的方法,稱爲onListItemClick()。我會覆蓋onListItemClick()方法,而不是明確設置onItemClickListenerhttp://developer.android.com/reference/android/app/ListActivity.html#onListItemClick(android.widget.ListView, android.view.View, int, long)

+0

然後我只是將我的onItemClickListener中的所有內容放入覆蓋onListItemClick()中?對不起,這裏是初學者。 – 2012-03-16 04:19:46

+0

是的,這是正確的。確保擴展ListActivity和NOT Activity。 – 2012-03-16 04:29:56

+0

這樣做的工作!非常感謝! – 2012-03-16 04:38:09

0

請糾正以下幾點

contactListView = getListView(); and setListAdapter(contactAdapter); 

上述語法可以,如果你的類擴展ListActivity。在你的情況正在擴展的活動,因此上述方法將無法正常工作的前提下使用。

您的menu_list_item.xml對我來說看起來非常好。在viewmenu.xml文件中的 在爲listview指定id時進行以下更正。

<ListView 
    android:id="@+id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content"/> 

請參閱此更正程式碼。

public class SampleActivity extends ListActivity 
{ 
    public static final String ROW_ID = "row_id"; // Intent extra key 
    private ListView contactListView; // the ListActivity's ListView 
    private CursorAdapter contactAdapter; // adapter for ListView 
    private String tableName; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     contactListView = (ListView) findViewById(R.id.list); // get the 
                   // built-in 
                   // ListView 
     contactListView.setOnItemClickListener(this); 

     setContentView(R.layout.viewmenu); 

     Bundle extras = getIntent().getExtras(); 
     tableName = extras.getString("table"); 

     // map each contact's name to a TextView in the ListView layout 
     String[] from = new String[] 
     { "name", "price" }; 
     int[] to = new int[] 
     { R.id.itemTextView, R.id.priceTextView }; 

     contactAdapter = new SimpleCursorAdapter(SampleActivity.this, 
       R.layout.menu_list_item, null, from, to); 
     contactListView.setAdapter(contactAdapter); 
    } 

    @Override 
    public void onListItemClick(AdapterView<?> adapterView, View view, 
      int position, long arg3) 
    { 

    } 
} 

現在在onListItemClick方法,你可以寫任何你想要的邏輯。

希望得到這個幫助。

+0

感謝您花時間做出迴應,當人們真正寫出代碼以幫助展示解決方案時,這非常有用。然而Alex Fu的解決方案在我看到這個之前就工作了。再次感謝! – 2012-03-16 04:37:24

+0

歡迎您:) – 2012-03-16 04:44:03

相關問題