和ListView不一樣的是,RecyclerView不再負(fù)責(zé)Item的擺放等顯示方面的功能。所有和布局、繪制等方面的工作Google都其拆分成不同的類(lèi)進(jìn)行管理。也因?yàn)槿绱薘ecyclerView中沒(méi)有對(duì)item的點(diǎn)擊事件,下面我們來(lái)介紹一種在RecyclerView添加Item點(diǎn)擊事件的方法。
在Adapter中實(shí)現(xiàn)
原理:
在ViewHolder中可以得到每個(gè)item的根布局,所以我們可以對(duì)根布局進(jìn)行OnClick的監(jiān)聽(tīng),利用java的回調(diào)機(jī)制將這個(gè)監(jiān)聽(tīng)公開(kāi)給Adapter,這樣就能夠?qū)ecyclerView設(shè)置ItemClickListener,不過(guò)這個(gè)Listener不是設(shè)置到RecyclerView上而是設(shè)置到Adapter。
具體實(shí)現(xiàn)步驟:
新建一個(gè)Adapter繼承RecyclerView.Adapter<VH>,這里以MyAdapter為例:
- 定義一個(gè)接口:
public interface setOnItemClickListener{
void OnItemClickListener(int pos);
}
- 新建一個(gè)私有變量用于保存用戶設(shè)置的監(jiān)聽(tīng)器及其set方法:
private setOnItemClickListener mListener;
- 在View Holder中對(duì)每個(gè)Item的根布局實(shí)現(xiàn)監(jiān)聽(tīng)
if(mListener!=null){
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mListener.OnItemClickListener(position);
}
});
}
- 暴露一個(gè)方法供外界調(diào)用
public void setOnItemClickListener(OnItemClickListener mListener){
this.mListener=mListener;
}
- 外界調(diào)用
初始化MyAdapter后
mAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() {
@Override
public void OnItemClickListener(int pos) {
// TODO;
}
});