RecyclerView 点击事件处理
RecyclerView不像ListView那样,提供了setOnItemClickListener,所以一般情况需要我们自己定义一个接口实现这个功能。我一般会通过Adapter去暴露出来一个接口,便于上层获取位置和点击事件。
- 首先在Adapter中新建一个接口
public static interface OnItemClickListener {
void onItemClicked(View v, int postion);
}
- 创建一个对应的实例,并且提供set/get方法
private OnItemClickListener onItemClickListener;
public OnItemClickListener getOnItemClickListener() {
return onItemClickListener;
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
- 在onCreateViewHolder的时候,给获取的view设置点击事件
view.setOnClickListener(this);
- 在onBindViewHolder时,将位置信息传递给view的holder中view的tag里
holder.itemview.setTag(position);
- 实现onClick事件的时候,调用自己定义的接口,将位置信息传递给调用者
@Override
public void onClick(View view) {
if (onItemClickListener != null) {
onItemClickListener.onItemClicked(view, (Integer) view.getTag());
}
}
这样上层就很方便的获取了位置信息,并可以做相对的处理。
RecyclerView recyclerView = new RecyclerView(this);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
MyAdapter adapter = new MyAdapter();
adapter.setOnItemClickListener(l -> { /*do something you need*/ });
recyclerView.setAdapter(adapter);
Done