在Recyclerview的所有项目中更改视图的可见性

时间:2017-07-09 12:02:09

标签: android android-recyclerview

我的recyclerview项目中有一个CheckBox可见的CheckBox。当我对其中一个项目进行longClick时,我想让它在recyclerview中的所有项目都可见。所以我这样做了:

    holder.faviorateVideoItemRelative.setOnLongClickListener(new View.OnLongClickListener() {
        public boolean onLongClick(View arg0) {
            holder.chk_faviorateVideo.setVisibility(View.VISIBLE);
           // holder.chk_faviorateVideo.setChecked(!holder.chk_faviorateVideo.isChecked());
            return  true ;
        }
    });

但这会使CheckBox仅对当前项目可见。 我甚至将我的代码移到了我的ViewHolder类,但没有任何改变。如果没有循环或重新绘制recyclerview,我怎么能这样做呢? 我需要做一些像android的默认文件管理器长按和选择。 提前致谢 。

2 个答案:

答案 0 :(得分:5)

您的Holder仅包含当前项目,这就是您仅在此项目中看到结果的原因。

第一个选项只是制作一些布尔标志并调用notifyDataSetChanged(),在onBindViewHolder()中只需使用该标志来设置可见性。

此外,您可以尝试创建CheckBoxesHolders的集合,并在长按下迭代它们以使复选框可见。至于我,这不是最糟糕的选择。

如果您不希望为此设置循环,我认为另一种方法是实施Observer模式 - 在复选框创建时,您应该将其添加为订阅者以接收可见性通知。

此外,很有可能在这里使用RX:
- 长按一下你发出事件
- 在您订阅该事件的复选框之前 它也与Observer模式有关。

答案 1 :(得分:0)

您可以在适配器中创建一个布尔值,如果长按或不长按,则存储信息,并在onBindViewHolder中检查是否为真或假,并根据它设置可见性:{{ 1}} 然后在您的点击监听器中切换此变量并调用holder.chk_faviorateVideo.setVisibility(longPressed ? View.VISIBLE : View.GONE);