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();
}