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));
}
});