2012-04-24 64 views
2

以下是我ListActivity,在同一類中的onCreate代碼如何在列表活動實施onItemClickListener

public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 

      fakeTripBuilder(); 

      setContentView(R.layout.cutom_list_view); 

      SimpleAdapter adapter = new SimpleAdapter(this, list, R.layout.custom_row_view, 
        new String[] {"stop","distance","time","icon","mode"}, 
        new int[] {R.id.text_stop,R.id.text_distance, R.id.text_time, R.id.icon, R.id.text_mode}); 

      populateList(); 
      setListAdapter(adapter); 
} 

我有以下方法

@Override 
     protected void onListItemClick(ListView l, View v, int position, long id){ 
      super.onListItemClick(l, v, position, id); 
      Log.d("Travel","You choosed!"); 
      Object o = this.getListAdapter().getItem(position); 
      Toast.makeText(this, "You Choosed"+o.toString(), Toast.LENGTH_LONG).show(); 
     } 

這裏是「custom_list_view.xml」

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:clickable="false" 
    android:gravity="center_horizontal|center_vertical" 
    android:orientation="vertical" > 
<ListView 
    android:id="@android:id/list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#000fff" 
    android:layout_weight="2" 
    android:drawSelectorOnTop="false"> 
</ListView> 
<TextView 
    android:id="@id/android:empty" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="#FFff00" 
    android:text="No data" 
/> 
</LinearLayout> 

問題是,onListItemClick方法在我點擊它時不會調用。幫幫我 !!

+0

您能更具體地瞭解NullPointerException嗎? – 2012-04-24 13:57:29

+0

爲什麼你設置一個佈局,並將其設置在setContentView和列表視圖 – krisDrOid 2012-04-24 14:00:04

+0

你得到空指針,因爲你沒有設置列表視圖佈局findViewByID listView – krisDrOid 2012-04-24 14:01:12

回答

6

要獲得在ListActivity到ListView參考你應該叫:

ListView lv = getListView(); 

你並不需要設置一個點擊監聽器,它已經有一個。只需覆蓋:

@Override 
public void onListItemClick(ListView l, View v, int position, long id) { 
    Object item = lv.getAdapter().getItem(position); 

} 

而且在XML文件中,ListView中應該有ID:

android:id="@android:id/list" 

編輯

您需要刪除

android:clickable="false" 

佈局允許任何兒童意見被點擊

+0

它定義爲:android:id =「@ id/android:list」,並且在同一個類中我已經實現了「onListItemClick」,但它不會調用。這就是爲什麼我試圖在問題中做到這一點。 – dinesh707 2012-04-24 14:15:59

+1

不是android:id =「@ id/android:list,但是android:id =」@ android:id/list「 – Style 2012-04-24 14:17:28

+0

是的,它必須是」@android:id/list「,否則它將不起作用 – 2012-04-24 14:29:22

0

ListView lv =(ListView)findViewById(R.layout.cutom_list_view);

您應該使用R.id.listview_id相反,應該在R.layout.cutom_list_view

定義,像這樣:

<ListView 
    android:id="@+id/listview_id" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" > 
</ListView> 

編輯:

R.layout。 cutom_list_view是你的佈局文件的id,但是你應該通過自己的id找到listview,像android:id =「@ + id/listview_id」,所以id將會是R.id.listview_id

+0

你是什麼意思的佈局xml?我應該放什麼? – dinesh707 2012-04-24 14:01:48

+0

在這個佈局中:cutom_list_view – Style 2012-04-24 14:02:55

+0

對不起,這是針對Activity,不是針對ListActivity,請看@David Scott在XML中的回答 – Style 2012-04-24 14:12:14

0

如果要捕獲列表中的單擊事件,請嘗試重寫onListItemClick方法。

1

自2012年詢問此問題以來,發生了很大變化。這是一個更新到接受的答案

要在ListActivity使用onItemClickListener,只是重寫onListItemClick(...)方法是這樣的:

public void onListItemClick(ListView listView, View view, int position, long id) { 
    ListView myListView = getListView(); 
    Object itemClicked = myListView.getAdapter().getItem(position); 
    Toast.makeText(getApplicationContext(), "Item Clicked: " + item + " \nPosition: " + id, 

    Toast.LENGTH_SHORT).show(); 
} 

通知的getItem()方法,而不是getItemAtPosition()在接受的答案

記住:爲此工作,您需要有一個id爲list否則你的應用會崩潰。

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

您仍然需要將android:id =「@ android:id/list」作爲ListView的id,而不僅僅是列表 – 2015-11-17 13:02:08