Q:如果要你给Recyclerview中展示的数据做一个查看详情页的点击事件该怎么做?
Q:如果列表中展示的数据包含的子布局也要做点击事件该怎么办?
Q:为什么使用listener的形式?
先来看第一个问题,如果只要做一个简单的点击事件,只要是点到那个item上就行了的话可以用很简单的方式实现。
1.在Adapter中定义一个接口
public interface OnRecyclerItemClickListener {
void onItemClick(int position);
}
2.在onBindViewHolder当中获取到position传进
xxx.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//有监听器的实例传入
if(onRecyclerItemClickListener!=null){
onRecyclerItemClickListener.onItemClick(position);
}
}
});
3.Adapter暴露接口给外部调用
public void setOnRecyclerItemClickListener(OnRecyclerItemClickListener listener) {
this.onRecyclerItemClickListener = listener;
}
4.在Activity中使用
private void clicktheItem(){
mAdapter.setOnRecyclerItemClickListener(new xxxxAdapter.OnRecyclerItemClickListener() {
@Override
public void onItemClick(int position) {
//在这里实现你的逻辑,可以是toast,也可以是跳转到另外一个activity,或者是别的需求
}
});
}
接下来是第二个问题,其实也很简单,在onBindViewHolder中再添加一个点击
在这个之前,我们现在接口当中再定义一个
void onChildrenClick(int position);
同样的方式实现一个
((NormalHolder) holder).你要监听点击的控件.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(onRecyclerItemClickListener!=null){
onRecyclerItemClickListener.onChildrenClick(position);
}
}
});
然后点击逻辑
@Override
public void onChildrenClick(int position) {
Log.d("click","click the children---"+position);
String name=mAdapter.getSource().get(position).getName();
Toast.makeText(GamesActivity.this,name,Toast.LENGTH_SHORT).show();
}
});
第三点不建议使用implements方式实现点击监听的理由
可以百度一下看一下别人的匿名内部类的使用原因