RecyclerView 又一问

2016-11-19 15:25:03 +08:00
 pcatzj

现在用一个 RecyclerView 做菜单,里面有 CheckBox ,可以选择,菜单有重置功能,点击重置按钮后所有已 checked 的 CheckBox 会把状态重置,但是现在出现了一个问题,就是我把菜单往下滑动后, 上面会有一部分菜单被隐藏,这时我遍历 RecyclerView 的 item 就无法遍历到这部分,所以导致这部分菜单无法重置,请问有什么好的办法?

8898 次点击
所在节点    Android
7 条回复
xingda920813
2016-11-19 15:38:29 +08:00
用一个 HashMap<Integer, Boolean> 存放 adapterPosition 与 checked 的对应关系;
onBindViewHolder 里设置 mCheckBox.setChecked(mMap.get(holder.getAdapterPosition));
重置时就遍历 Map 全部设置为 true / false ,再 notifyDataSetChanged()。
这样不优雅,期待更好的解决方案。
zhaohui318
2016-11-19 15:41:21 +08:00
把 checked 信息反映到 model 上,然后遍历 model ;
或者把 checked 信息单独存到一个地方( list or set );
遍历 view 应该不是很好的实践。
chefish
2016-11-19 15:41:41 +08:00
你肯定不能遍历 item 啊, item 是当前显示的 view ,你应该直接改数据,然后 notifyDataSetChanged
ifane
2016-11-19 16:53:24 +08:00
修改 CheckBox 的状态数据,然后 apter.notifyDataSetChanged();直接刷新整个 RV 。
KNOX
2016-11-19 19:09:12 +08:00
http://blog.oceancx.com/2016/01/31/Android-CheckBox%E8%AF%A6%E8%A7%A3 建议看一下这篇文章,里面有提到 CheckBox 在 RecyclerView 的使用,我试过可行。
jesonyang
2016-11-19 21:50:28 +08:00
RecyclerView 、 ListView 实现单选列表的优雅之路 http://dwz.cn/4DF4cN
pcatzj
2016-11-19 22:32:58 +08:00
@xingda920813
@zhaohui318
@chefish
@ifane
@KNOX
@jesonyang

首先感谢所有的回复者,你们的回复确实给了我很大的帮助,能够让我顺利解决问题,和大家的想法对比,才能发现我原来的想法是错误的,我原来是想着遍历 item ,然后依次将 checkbox 的状态设置为 unchecked ,但是这样确实会有问题,而且思想上也不是可行的,然后我根据你们的回答,每次对 dataSet 进行操作。我的模型其实比我问题里的复杂得多,有多重嵌套,还有一些非统一的状态,但是根本的思路还是不变的,所以这次路就走得比较弯,但是好在是问题已解决,大家也给我上了一课,在这里还是统一对大家表示感谢!另外,感谢后面两位的分享,真好可以让我做个笔记做个参考,感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/321690

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX