假设我有一个ListView
. 那ListView
有项目。该项目具有子项目(例如,按钮)。
为此,我使用了适配器的子类,因此getView()
在Adaptor
. 我想在我的活动中以某种方法接收该子项的点击事件ListView
。希望我的问题得到很好的解释。
哪个是最好的方法?
假设我有一个ListView
. 那ListView
有项目。该项目具有子项目(例如,按钮)。
为此,我使用了适配器的子类,因此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);
//
如果您以后决定这样做,使用这种方法也很容易将事件广播添加到其他子项目的活动中。