RecyclerView现在是没有提供setOnItmeClickListener()方法的,但是它提供了 addOnItemTouchListener()方法。
要实现对Item点击,或者其他事件的监听 有以下几种解决方案。
在Adpater中做文章
在Adapter中处理也分为两类
不过大致的思路都是一样
- ViewHolder implements OnClickListener 复写 onClick方法
- 为需要监听的View设置 监听事件 setOnClickListener
- 定义自己的点击事件回调接口,在onClick方法中调用自己的回调接口
- 实现自己定义的回调接口,这一步有两种实现方式。
在onCreateViewHolder中实现回调接口
在 onCreateViewHolder中实现的优点是onCreateViewHolder(ViewGroup parent, int viewType)
有两个参数,如果你的 ViewHolder有多种类型的话,可以根据 viewType参数来对不同的ViewHolder做不同的处理。
缺点:这个地方定义接口回调,没有position参数,要想知道被点击的item的位置,比较麻烦。下面是具体代码
//Adapter内部类ViewHolder的具体实现。
public static class ViewHolder extends RecyclerView.ViewHolder implements OnClickListener {
public TextView txtViewTitle;
public ImageView imgViewIcon;
public IMyViewHolderClicks mListener;
public ViewHolder(View itemLayoutView, IMyViewHolderClicks listener) {
super(itemLayoutView);
mListener = listener;
txtViewTitle = (TextView) itemLayoutView.findViewById(R.id.item_title);
imgViewIcon = (ImageView) itemLayoutView.findViewById(R.id.item_icon);
imgViewIcon.setOnClickListener(this);
itemLayoutView.setOnClickListener(this);
}
//在点击事件中调用自己的接口
@Override
public void onClick(View v) {
if (v instanc