public static interface OnItemClickListener {
void onItemClick(View view,ViewName VIEW,int position);
void onItemLongClick(int position);
}
private OnItemClickListener mOnItemClickListener = null;
- 在adapter中設置以下函數(shù),供在activity或fragment中調用
public void setmOnItemClickListener(RecyclerViewMessageAdapter.OnItemClickListener onItemClickListener){
this.mOnItemClickListener = onItemClickListener;
}
itemView.setOnClickListener(RecyclerViewMessageAdapter.this);
circleImageView.setOnClickListener(RecyclerViewMessageAdapter.this);
- 重寫onClick函數(shù),根據(jù)id來區(qū)別每一個view,通過getTag()來獲取view的位置,記住在bind的時候要setTag(position)。ViewName變量類型是自己定義的枚舉類型。
//用一個枚舉類型來表示不同的view
public enum ViewName{
ITEM,
HEADER
}
@Override
public void onClick(View v){
int position = (int)v.getTag();
switch (v.getId()){
case R.id.civ_header:
//這是頭像的點擊事件
mOnItemClickListener.onItemClick(v,ViewName.HEADER,position);
break;
default:
//默認是整個item的點擊事件
mOnItemClickListener.onItemClick(v,ViewName.ITEM,position);
break;
}
}
- 在activity中實現(xiàn)接口該接口,重寫onItemClick()方法,同樣是根據(jù)id來區(qū)別不同的view。
@Override
public void onItemClick(View view, RecyclerViewMessageAdapter.ViewName viewName,int position) {
switch (view.getId()){
case R.id.civ_header:
Toast.makeText(getContext(),"點擊了頭像:" + position,Toast.LENGTH_SHORT).show();
Log.d(TAG, "onItemClick: 點擊了頭像:" + position);
break;
default:
Toast.makeText(getContext(),"點擊了item:" + position,Toast.LENGTH_SHORT).show();
Log.d(TAG, "onItemClick: 點擊了item:" + position);
break;
}
}
一個小坑
- 今天我在設置item點擊事件的時候,發(fā)現(xiàn)實現(xiàn)之后無效,最后發(fā)現(xiàn)是我的item布局外面多套了一個framelayout,我的item布局是cardview寫的,當外面套了個framelayout的時候,item的點擊事件就失效了,刪除之后點擊事件就能用了。
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。