RecyclerView为每个item添加点击事件

StarMushroom / 文 发表于2017-04-27 18:26 次阅读 recyclerview

最终目的

模拟ListView的setOnItemClickListener()方法,调用者只须调用类似于setOnItemClickListener的东西就能获得被点击item的相关数据。

原理

为RecyclerView的每个子item设置setOnClickListener,然后在onClick中再调用一次对外封装的接口,将这个事件传递给外面的调用者。而“为RecyclerView的每个子item设置setOnClickListener”在Adapter中设置。其实直接在onClick中也能完全处理item的点击事件,但是这样会破坏代码的逻辑。

步骤

1、在MyAdapter中定义接口

public interface OnItemClickListener{
     void onItemClick(int position);
}

2、声明这个接口变量

private OnItemClickListener mItemClickListener;

3、在onCreateViewHolder()中为每个item添加点击事件

@Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = View.inflate(mContext, R.layout.item_linear, null);
        RecyclerView.ViewHolder holder = new LinearViewholder(view);
        view.setOnClickListener(this);
        return holder;
    }
@Override
   public void onClick(View v) {
     if (mItemClickListener!=null){
         mItemClickListener.onItemClick((Integer) v.getTag());
        }
    }

4、注意上面调用接口的onItemClick()中的v.getTag()方法,这需要在onBindViewHolder()方法中设置和item相关的数据

 @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        LinearViewholder viewholder = (LinearViewholder) holder;
        viewholder.mTextView.setText(mList.get(position));
        viewholder.itemView.setTag(position);
    }

5、提供set方法

    public void setItemClickListener(OnItemClickListener itemClickListener) {
        mItemClickListener = itemClickListener;
    }

6、在MainActivity中

    MyRecyclerViewAdapter adapter = new MyRecyalerViewAdapter();
    adapter.setItemClickListener(this);
 @Override
    public void onItemClick(int position) {
        Toast.makeText(this, ""+position, Toast.LENGTH_SHORT).show();
    }
收藏 赞 (34) 踩 (55)