爲RecyclerView添加Item點擊事件

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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章