美文网首页
RecyclerView中item以及其子view点击事件的实现

RecyclerView中item以及其子view点击事件的实现

作者: 奥利奥蘸墨水 | 来源:发表于2019-03-02 09:25 被阅读0次
  • 在adapter中定义接口
    public static interface OnItemClickListener {
        void onItemClick(View view,ViewName VIEW,int position);
        void onItemLongClick(int position);
    }
  • 定义接口变量
private OnItemClickListener mOnItemClickListener = null;
  • 在adapter中设置以下函数,供在activity或fragment中调用
public void setmOnItemClickListener(RecyclerViewMessageAdapter.OnItemClickListener onItemClickListener){
    this.mOnItemClickListener = onItemClickListener;
}
  • 在viewHolder中设置点击事件
    itemView.setOnClickListener(RecyclerViewMessageAdapter.this);
    circleImageView.setOnClickListener(RecyclerViewMessageAdapter.this);
  • 重写onClick函数,根据id来区别每一个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中实现接口该接口,重写onItemClick()方法,同样是根据id来区别不同的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点击事件的时候,发现实现之后无效,最后发现是我的item布局外面多套了一个framelayout,我的item布局是cardview写的,当外面套了个framelayout的时候,item的点击事件就失效了,删除之后点击事件就能用了。

相关文章

网友评论

      本文标题:RecyclerView中item以及其子view点击事件的实现

      本文链接:https://www.haomeiwen.com/subject/lcusuqtx.html