2010-03-18 767 views
130

如何在ListView上監聽點擊事件?如何在Android中處理ListView點擊

這就是我現在

ListView list = (ListView)findViewById(R.id.ListView01); 
... 
list.setAdapter(adapter); 

有當我做了以下

list.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    public void onItemSelected(AdapterView parentView, View childView, 
                 int position, long id) 
    { 
     setDetail(position); 
    } 

    public void onNothingSelected(AdapterView parentView) { 

    } 
}); 

也似乎並不做任何點擊。
而且所有這些代碼都存在於擴展Activity的類中。

回答

173

在您的列表視圖中,使用setOnItemClickListener

+0

謝謝大衛。 Geezzz,我嘗試了setOnClickListener和setOnItemSelectedListener,但錯過了閱讀setOnItemClickListener。 謝謝, Tee – teepusink

+0

我做了與teepusink相同的操作:D –

+0

您如何將數據發送到該詳細視圖? (如YouTube點擊進入視頻) – Sauron

41

您需要設置充氣視圖「可點擊」和「能聽單擊事件」在您的適配器類getView()方法。

convertView = mInflater.inflate(R.layout.list_item_text, null); 
convertView.setClickable(true); 
convertView.setOnClickListener(myClickListener); 

,並宣佈在ListActivity點擊收聽如下,

public OnClickListener myClickListener = new OnClickListener() { 
public void onClick(View v) { 
       //code to be written to handle the click event 
    } 
}; 

這也是如此,只有當你通過擴展BaseAdapter定製適配器。

請參考ANDROID_SDK /樣品/ ApiDemos/src目錄/ COM /例子/安卓/的API /視圖/ List14.java瞭解更多詳情

+0

thanks Vijay我已經面臨點擊問題的充氣視圖我已經解決你的回答 – dhaiwat

+0

但是這並不能確定什麼項目被點擊,這使得它或多或少無用的列表?正確? –

+0

你可以設置標籤convertView並檢查相同的onClick ..使用標籤哪個項目被點擊可以識別... –

17

兩個答案之前,我的是正確的 - 你可以使用OnItemClickListener

這是很好的注意,OnItemClickListenerOnItemSelectedListener之間的區別,雖然聽上去含蓄,其實顯著,爲項目選擇和重點與您AdapterView的觸摸模式有關。

默認情況下,在觸摸模式下,沒有選擇和焦點。 你可以看看here瞭解更多關於這個主題的信息。

+2

bah android madness – max4ever

84

假設的ListView對象是LV,作出以下

lv.setClickable(true); 
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) { 

    Object o = lv.getItemAtPosition(position); 
    /* write you handling code like... 
    String st = "sdcard/"; 
    File f = new File(st+o.toString()); 
    // do whatever u want to do with 'f' File object 
    */ 
    } 
}); 
+1

在'onItemClick'裏面不能訪問'lv'。什麼是解決這個問題的好方法? – shinjin

+1

@shinjin對此做出最終決定。 '最終ListView lv =(ListView)findViewById(R.id.your_list_view);' – Lekensteyn

+0

清理方式:'Object o =((ListView)arg0).getItemAtPosition(position);' – JimmyB

5

你必須使用setOnItemClickListener有人說。
的代碼應該是這樣的:

listView.setOnItemClickListener(new OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
     // When clicked, show a toast with the TextView text or do whatever you need. 
     Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show(); 
    } 
}); 
5

首先,類必須實現點擊listenener:

implements OnItemClickListener 

然後設置一個監聽到ListView

yourList.setOnItemclickListener(this); 

最後,創建clic方法:

@Override 
public void onItemClick(AdapterView<?> parent, View view, int position, 
long id) { 
Toast.makeText(MainActivity.this, "You Clicked at " +countries[+ position], Toast.LENGTH_SHORT).show(); 
} 

你可以看看下載代碼here

6

這個解決方案真的很簡約,不會弄亂你的代碼。

在你的list_item.xml(不是listView!)分配屬性安卓的onClick這樣的:

<RelativeLayout android:onClick="onClickDoSomething"> 

,然後在您的活動調用此方法:

public void onClickDoSomething(View view) { 
    // the view is the line you have clicked on 
} 
1

使用setOnItemClickListener()API在您的活動。以下是樣本。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 

@Override 
public void onItemClick(AdapterView<> parent, View view, int position, long id) 
{ 
    // your code here. 
} 

});