Android中RecyclerView控件没有点击事件众所周知,做一个小记录,方便以后快速查阅:
在自定义的adapter适配器中,实现如下:
public class MyViewAdapter extends RecyclerView.Adapter<MyViewAdapter.ViewHolder> implements View.OnClickListener {
...
@NonNull
@Override
public MyViewAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
ViewHolder viewHolder = null;
if (viewHolder == null) {
View itemView = LayoutInflater.from(mContext).inflate(R.layout.item_content, parent, false);
viewHolder = new ViewHolder(itemView);
itemView.setOnClickListener(this);
}
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull RecyclerViewAdapter.ViewHolder holder, int position) {
String text = mList.get(position).getText();
holder.mTextView.setText(text);
holder.itemView.setTag(position); //把位置设置到tag中,与下面对应。
}
private OnItemClickListener mOnItemClickListener;
public interface OnItemClickListener {
void onItemClick(View view, int position);
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.mOnItemClickListener = listener;
}
@Override
public void onClick(View v) {
if (mOnItemClickListener != null) {
//注意这里使用getTag方法获取position
mOnItemClickListener.onItemClick(v, (int) v.getTag());
}
}
...
}
在Activity中使用:
mRvAdapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Log.d("TAG",mList.get(positon));
}
});