2013-07-24 14 views
0

Supose我有一個ListView。那ListView有項目。這些項目有子項目(例如,按鈕)。優雅而有效的方式來捕捉Android中列表視圖項中的項目中的事件

爲此我使用適配器的子類,所以getView()Adaptor內部實現。我希望在我的活動中使用某些方法接收該子項目的點擊事件,其中ListView是。希望我的問題得到很好的解釋。

哪種方法最好?

+0

而不是有一個ListView的項目,每個都有按鈕,我會建議你使用[條件操作欄](http://developer.android.com/guide/topics/ui/menus.html#出租車)。基本上,每當你點擊ListView中的一個項目時,就會出現一個特殊的操作欄,可以爲每個項目或任何你想要的項目定製。我推薦這個的原因是因爲有時定製的具有按鈕和類似東西的'ListView'可能會變得混亂,這在我的體驗中是一種更直觀的解決方案,它使您能夠更輕鬆地避免草率的代碼。 – scottyseus

+0

斯科特,謝謝你的評論。這將是非常有用的,因爲我不知道! –

+0

沒問題!當我嘗試類似於你正在做的事情時,我並不知道條件操作欄,它確實是一種生活節省 – scottyseus

回答

4

哪種方法最好?

我不認爲有最好的辦法。實現你想要的東西的一個簡單,乾淨的方法是實施子項目事件通用監聽器,並通過那些通過接口(由Activity實現):

public interface OnButtonEventListener { 

    void onSubButtonClicked(int parentRowPosition); 
} 

您的活動將實現這個接口。

然後在適配器建立一個通用的聽衆:

private OnButtonEventListener mBtnListener; // as you'll pass a Context to your adapter, the Activity which implements the OnButtonEventListener 
private void OnClickListener mListener = new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Integer rowPosition = (Integer) v.getTag();// you could pass other data as well 
      mBtnListener.onButtonClicked(rowPosition); 
     } 

} 

然後在適配器的getView方法:

//... 
Button b = ...find the Button 
b.setTag(Integer.valueOf(position)); 
b.setOnClickListener(mListener); 
// 

採用這種方法也很容易賽事轉播添加到活動其他子項目,如果你決定這樣做以後。

相關問題