我们知道,Google一直推动RecyclerView代替ListView,但是令人烦恼的事情也产生了,RecyclerView并没有OnItemClick方法,但是我们经常会产生希望Item整体响应而不是其中的各个子控件各自响应的需求。拜读了许多大牛的解决方法,大多是重写RecyclerVIew的方法,确实有效,但是我在实际开发中使用另一种方法,简单地解决了这个问题。
原理十分简单,在Item的布局文件中,为最外层layout添加id,并且为其添加以下属性:
android:focusable="true"
android:clickable="true"
以上可保证最外层布局优先获得焦点,并且可以点击,然后在你的适配器中实现对layout的方法即可:
holder.optLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = holder.getAdapterPosition();
Opt opt = mOptList.get(position);
//balabala...
}
});
可见原理非常简单。
如果希望实现水波纹等触摸交互,也可以在刚才的最外层layout中添加前景属性:
android:foreground="?android:attr/selectableItemBackground"
就可以看到点击后漂亮的水波纹效果了!