虽然已经有一些答案,但我想我可能会提供我的实现以及解释。 (详情请见another similar question I answered)。
因此,要添加点击侦听器,您的内部 ViewHolder 类需要实现 View.OnClickListener。这是因为您将为ViewHolder 的构造函数的itemView 参数设置一个OnClickListener。让我告诉你我的意思:
public class ExampleClickViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView text1, text2;
ExampleClickViewHolder(View itemView) {
super(itemView);
// we do this because we want to check when an item has been clicked:
itemView.setOnClickListener(this);
// now, like before, we assign our View variables
title = (TextView) itemView.findViewById(R.id.text1);
subtitle = (TextView) itemView.findViewById(R.id.text2);
}
@Override
public void onClick(View v) {
// The user may not set a click listener for list items, in which case our listener
// will be null, so we need to check for this
if (mOnEntryClickListener != null) {
mOnEntryClickListener.onEntryClick(v, getLayoutPosition());
}
}
}
您需要添加的唯一其他东西是Adapter 的自定义接口和setter 方法:
private OnEntryClickListener mOnEntryClickListener;
public interface OnEntryClickListener {
void onEntryClick(View view, int position);
}
public void setOnEntryClickListener(OnEntryClickListener onEntryClickListener) {
mOnEntryClickListener = onEntryClickListener;
}
因此,您的新的支持点击的Adapter 已完成。
现在,让我们使用它...
ExampleClickAdapter clickAdapter = new ExampleClickAdapter(yourObjects);
clickAdapter.setOnEntryClickListener(new ExampleClickAdapter.OnEntryClickListener() {
@Override
public void onEntryClick(View view, int position) {
// stuff that will happen when a list item is clicked
}
});
这基本上是您设置普通Adapter 的方式,除了您使用您创建的setter 方法来控制当您的用户单击特定列表项时您将执行的操作。
我在this Gist on GitHub 上制作了一组示例,其中显示了可用作模板的完整 Java 文件,或帮助您了解 Adapter 的工作原理。