我的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的默认文件管理器长按和选择。 提前致谢 。
答案 0 :(得分:5)
您的Holder
仅包含当前项目,这就是您仅在此项目中看到结果的原因。
第一个选项只是制作一些布尔标志并调用notifyDataSetChanged()
,在onBindViewHolder()
中只需使用该标志来设置可见性。
此外,您可以尝试创建CheckBoxes
或Holders
的集合,并在长按下迭代它们以使复选框可见。至于我,这不是最糟糕的选择。
如果您不希望为此设置循环,我认为另一种方法是实施Observer模式 - 在复选框创建时,您应该将其添加为订阅者以接收可见性通知。
此外,很有可能在这里使用RX:
- 长按一下你发出事件
- 在您订阅该事件的复选框之前
它也与Observer
模式有关。
答案 1 :(得分:0)
您可以在适配器中创建一个布尔值,如果长按或不长按,则存储信息,并在onBindViewHolder
中检查是否为真或假,并根据它设置可见性:{{ 1}}
然后在您的点击监听器中切换此变量并调用holder.chk_faviorateVideo.setVisibility(longPressed ? View.VISIBLE : View.GONE);