【问题标题】:Change visibility of a view in all items of recyclerview更改所有 recyclerview 项目中视图的可见性
【发布时间】:2017-07-09 20:17:29
【问题描述】:

我的 recyclerview 项目中有一个 CheckBox 具有 Gone visibility 。当我长按其中一个项目时,我想让 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的默认文件管理器长按并选择. 提前致谢 。

【问题讨论】:

    标签: android android-recyclerview


    【解决方案1】:

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

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

    您还可以尝试创建CheckBoxesHolders 的集合,并在长按时迭代它们以使复选框可见。对我来说,这不是最糟糕的选择。

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

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

    【讨论】:

    【解决方案2】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多