RecycleView实现item内监听事件

RecycleView自身不带有监听事件 如果需要对点击整体的Item设置监听事件时 需要在Adapter中的onBindViewHolder方法内 用view所带的监听功能进行监听

一 当监听item内某个按钮之类

通过holder.itemView进行定位到该按钮 然后直接设置监听事件即可

@Override
    public void onBindViewHolder(LinearViewHolder holder, int position) {

        Button mBtnFocused = holder.itemView.findViewById(R.id.btn_focused);

        mBtnFocus.setOnClickListener(new View.OnClickListener() {
            @Override
             public void onClick(View v) {

                Toast.makeText(mContext, "关注成功", Toast.LENGTH_SHORT).show();
                mBtnFocus.setVisibility(View.GONE);
            }
        });
 }

二 对item整体进行监听

同样通过holder.itemView可以直接设置监听事件

 @Override
    public void onBindViewHolder(LinearViewHolder holder, int position) {
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
				//此处设定监听事件
                // 有人点击item了,处理一下

            }
        });//item整体视图进行监听
 }

三 对Item整体进行监听并要求获取item内参数

需要进行接口回调

adapter内声明OnItemClickListener接口

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;

import androidx.recyclerview.widget.RecyclerView;

public class LinearAdapter extends RecyclerView.Adapter<LinearViewHolder> {

    private Context mContext;

    private OnItemClickListener listener;

    private String name = "哈哈哈";

    public void setListener(OnItemClickListener listener) {
        this.listener = listener;
    }

    public LinearAdapter(Context context) {
        this.mContext = context;
    }

    @Override
    public LinearViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new LinearViewHolder(LayoutInflater.from(mContext).inflate(R.layout.feed_linear_item, parent, false));
    }

    @Override
    public void onBindViewHolder(LinearViewHolder holder, int position) {
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // 有人点击item了,处理一下

                if (listener != null) {
                    listener.onClick(name);//判断是否
                }


            }
        });//item整体视图进行监听
    }


    @Override
    public int getItemCount() {
        return 10;
    }

    /**
     * item点击事件监听
     */
    public interface OnItemClickListener {
        void onClick(String name);
    }
}


activity中可接收到参数

      mAdapter.setListener(new LinearAdapter.OnItemClickListener() {
            @Override
            public void onClick(String name) {
                tv_1.setText(name);
            }
        });

例子:老师接受学生的学习情况


public class Teacher {

    private String name;

    public Teacher(String name) {
        this.name = name;
    }

    public void publishHomeWork(Student student) {
        student.setListener(new OnHomeWorkDoneListener() {
            @Override
            public void done() {
                Log.i("aaaaaaaaaaaa", name + " I get it");
            }
        });
        student.doHomeWork();
    }
}
public class Student {

    private OnHomeWorkDoneListener listener;

    public void setListener(OnHomeWorkDoneListener listener) {
        this.listener = listener;
    }

    public void doHomeWork() {
        Log.i("aaaaaaaaa", "start do *** ");
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        if (listener != null) {
            listener.done();
        }
        Log.i("aaaaaaaaa", "down");
    }
}


public interface OnHomeWorkDoneListener {
    void done();
}

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值