Recycleview ViewHolder复用出现item选中或其它状态混乱解决

前两个是其他大神提到很多的方法,不推荐使用。

方法一:
holder.setIsRecyclable(false);

暴力解决,使viewholder不进行复用,也不存在混乱选中的问题了,但是 滑动卡的要死。

方法二:

在JavaBean中设置一个变量,相当于一个标志位,但是需要修改bean 。虽然只是加个字段的问题,但是不建议。

方法三:

1.在Adapter中创建一个list记录选中的item的position,

private List<Integer> checkIds = new ArrayList<>();

2.然后onBindViewHolder方法中,根据list中是否包含当前position来显示是否选中的状态

if (checkIds.contains(holder.getLayoutPosition()))
        expand.expand();// checkBox.setChecked(true);
    else
        expand.collapse();// checkBox.setChecked(false);

3.选中点击事件,选中则add到list,未选择则remove,注意这里添加和remove的是Integer对象,因为list.remove()方法既可以传对象,又可以传集合元素索引,这里不要混淆。

holder.itemView.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        if (expand.isExpanded()) {
            checkIds.remove(Integer.valueOf(holder.getLayoutPosition()));
        }else {
            checkIds.add(holder.getLayoutPosition());
        }


        L.show("position==" + holder.getPosition());
        expand.toggle();


    }
});
other:上面是多选方法,下面继续补充一种单选方法
a.gif

1.在Adapter中创建一个int成员变量记录选中的item的position,和ItemView根布局实例对象。

private int checkId = -1;
private ExpandableLayout oldView;

2.然后onBindViewHolder方法中,根据记录的checkId显示是否选中的布局

  if (checkId == holder.getLayoutPosition())
    expand.expand(false);
 else
    expand.collapse(false);

3.item条目点击事件(主要)

holder.getView(R.id.mTranItemContent).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (oldView != null && checkId != holder.getLayoutPosition())// 判断上一次点击选中的View是不是自己
            oldView.collapse();// 将上一次选中的item取消掉
        expand.toggle(); // 切换当前item的状态
        if (expand.isExpanded()) {// 切换之后判断状态,如果是checked状态,就记录当前item信息
            checkId = holder.getLayoutPosition();
            oldView = expand;
        } else {
            checkId = -1;
            oldView = null;
        }
    }
});
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Tangram是阿里出品、用于快速实现组合布局的框架模型,在手机天猫Android&iOS版 内广泛使用 该框架提...
    wintersweett阅读 3,382评论 0 1
  • 详情页面 packagecom.example.shoppingcar; importandroid.conten...
    ForCrazyLove阅读 595评论 0 2
  • 初识Android时,我对ListView、GradView中的Adapter一直半懂非懂,每次写Adapter都...
    blink_dagger阅读 6,029评论 4 10
  • 人都会把最坏的情绪、脾气留给最亲的人 我家嫂子经常对我说:出嫁前在娘家,她从不在外人面前发脾气,显露她的个人情绪,...
    南歌子吟阅读 400评论 0 4
  • 我哭,我只是一个女人 外两首 我哭江山,哭青春,哭路过的鸟鸣 唯独不哭玫瑰,哭百合,哭夜莺 哭隔壁的小媳妇,她的小...
    红精灵阅读 678评论 0 0