优雅而有效的方法来捕获Android中列表视图项内的项目中的事件

时间:2013-07-24 11:49:33

标签: java android android-listview

我有一个ListView。那个ListView有项目。这些项目有子项目(例如,按钮)。

为此,我使用适配器的子类,因此getView()内部实现了Adaptor。我希望在ListView所在的活动中以某种方式接收该子项目的点击事件。希望我的问题得到很好的解释。

哪种方法最好?

1 个答案:

答案 0 :(得分: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);
//

如果您决定稍后这样做,使用此方法也可以轻松地将事件广播添加到其他子项的活动中。