1. 定義接口
在Adapter中定義一個Click事件的回調接口
public interface OnItemClickListener {
void onItemClick(View view, int position);
}
2. 給view添加點擊事件
在onBindViewHolder()函數中綁定onClick的監聽事件
@Override
public void onBindViewHolder(final NormalTextViewHolder holder, int position) {
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mOnItemClickListener != null)
mOnItemClickListener.onItemClick(v, holder.getAdapterPosition());
}
});
}
RecyclerView 中的數據有位置改變(比如刪除)時一般不會重新調用 onBindViewHolder() 方法,除非這個元素不可用。所以獲取position的值注意使用holder.getAdapterPosition()
如果使用 setTag() & getTag()的方式獲取 或者 直接傳遞position進去
這兩種方式會導致 刪除元素後,點擊後面的元素報 IndexOutOfBoundsException
或者 逐個往第一個位置添加元素時, 每個item的pisition都爲0的情況發生
3. 將接口暴露出去
Adapter中定義setOnItemClickListener()方法
public void setOnItemClickListener(OnItemClickListener listener) {
this.mOnItemClickListener = listener;
}
4. 外部調用
在使用的地方(一般是Activity等)調用綁定點擊事件的監聽
mAdapter.setOnItemClickListener(this);