RecyclerView为每个item添加点击事件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/niu_yue_jiao/article/details/80236236


最终目的

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

原理

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

步骤

1、在MyAdapter中定义接口

  1. public interface OnItemClickListener{
  2. void onItemClick(int position);
  3. }

2、声明这个接口变量

  1. private OnItemClickListener mItemClickListener;

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

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

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

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

5、提供set方法

  1. public void setItemClickListener(OnItemClickListener itemClickListener) {
  2. mItemClickListener = itemClickListener;
  3. }

6、在MainActivity中

  1. MyRecyclerViewAdapter adapter = new MyRecyalerViewAdapter();
  2. adapter.setItemClickListener(this);
  3. @Override
  4. public void onItemClick(int position) {
  5. Toast.makeText(this, ""+position, Toast.LENGTH_SHORT).show();
  6. }
阅读更多
换一批

没有更多推荐了,返回首页