RecyclerView為每個item新增點選事件
阿新 • • 發佈:2019-01-04
最終目的
模擬ListView的setOnItemClickListener()方法,呼叫者只須呼叫類似於setOnItemClickListener的東西就能獲得被點選item的相關資料。
原理
為RecyclerView的每個子item設定setOnClickListener,然後在onClick中再呼叫一次對外封裝的介面,將這個事件傳遞給外面的呼叫者。而“為RecyclerView的每個子item設定setOnClickListener”在Adapter中設定。其實直接在onClick中也能完全處理item的點選事件,但是這樣會破壞程式碼的邏輯。
步驟
1、在MyAdapter中定義介面
public
void onItemClick(int position);
}
2、宣告這個介面變數
privateOnItemClickListener mItemClickListener;
3、在onCreateViewHolder()中為每個item新增點選事件
@Override
publicRecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent,int viewType){
View view =View.inflate(mContext, R.layout.item_linear,null
RecyclerView.ViewHolder holder =newLinearViewholder(view);
view.setOnClickListener(this);
return holder;
}
@Override
publicvoid onClick(View v){
if(mItemClickListener!=null){
mItemClickListener.onItemClick((Integer) v.getTag());
}
}
4、注意上面呼叫介面的onItemClick()中的v.getTag()方法,這需要在onBindViewHolder()方法中設定和item相關的資料
@Override
publicvoid onBindViewHolder(RecyclerView.ViewHolder holder,int position){
LinearViewholder viewholder =(LinearViewholder) holder;
viewholder.mTextView.setText(mList.get(position));
viewholder.itemView.setTag(position);
}
5、提供set方法
publicvoid setItemClickListener(OnItemClickListener itemClickListener){
mItemClickListener = itemClickListener;
}
6、在MainActivity中
MyRecyclerViewAdapter adapter =newMyRecyalerViewAdapter();
adapter.setItemClickListener(this);
@Override
publicvoid onItemClick(int position){
Toast.makeText(this,""+position,Toast.LENGTH_SHORT).show();
}