0
Supose我有一個ListView
。那ListView
有項目。這些項目有子項目(例如,按鈕)。優雅而有效的方式來捕捉Android中列表視圖項中的項目中的事件
爲此我使用適配器的子類,所以getView()
在Adaptor
內部實現。我希望在我的活動中使用某些方法接收該子項目的點擊事件,其中ListView
是。希望我的問題得到很好的解釋。
哪種方法最好?
Supose我有一個ListView
。那ListView
有項目。這些項目有子項目(例如,按鈕)。優雅而有效的方式來捕捉Android中列表視圖項中的項目中的事件
爲此我使用適配器的子類,所以getView()
在Adaptor
內部實現。我希望在我的活動中使用某些方法接收該子項目的點擊事件,其中ListView
是。希望我的問題得到很好的解釋。
哪種方法最好?
哪種方法最好?
我不認爲有最好的辦法。實現你想要的東西的一個簡單,乾淨的方法是實施子項目事件通用監聽器,並通過那些通過接口(由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);
//
採用這種方法也很容易賽事轉播添加到活動其他子項目,如果你決定這樣做以後。
而不是有一個ListView的項目,每個都有按鈕,我會建議你使用[條件操作欄](http://developer.android.com/guide/topics/ui/menus.html#出租車)。基本上,每當你點擊ListView中的一個項目時,就會出現一個特殊的操作欄,可以爲每個項目或任何你想要的項目定製。我推薦這個的原因是因爲有時定製的具有按鈕和類似東西的'ListView'可能會變得混亂,這在我的體驗中是一種更直觀的解決方案,它使您能夠更輕鬆地避免草率的代碼。 – scottyseus
斯科特,謝謝你的評論。這將是非常有用的,因爲我不知道! –
沒問題!當我嘗試類似於你正在做的事情時,我並不知道條件操作欄,它確實是一種生活節省 – scottyseus