现在用一个 RecyclerView 做菜单,里面有 CheckBox ,可以选择,菜单有重置功能,点击重置按钮后所有已 checked 的 CheckBox 会把状态重置,但是现在出现了一个问题,就是我把菜单往下滑动后, 上面会有一部分菜单被隐藏,这时我遍历 RecyclerView 的 item 就无法遍历到这部分,所以导致这部分菜单无法重置,请问有什么好的办法?
1
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()。 这样不优雅,期待更好的解决方案。 |
2
zhaohui318 2016-11-19 15:41:21 +08:00
把 checked 信息反映到 model 上,然后遍历 model ;
或者把 checked 信息单独存到一个地方( list or set ); 遍历 view 应该不是很好的实践。 |
3
chefish 2016-11-19 15:41:41 +08:00
你肯定不能遍历 item 啊, item 是当前显示的 view ,你应该直接改数据,然后 notifyDataSetChanged
|
4
ifane 2016-11-19 16:53:24 +08:00
修改 CheckBox 的状态数据,然后 apter.notifyDataSetChanged();直接刷新整个 RV 。
|
5
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 的使用,我试过可行。
|
6
jesonyang 2016-11-19 21:50:28 +08:00
RecyclerView 、 ListView 实现单选列表的优雅之路 http://dwz.cn/4DF4cN
|
7
pcatzj OP @xingda920813
@zhaohui318 @chefish @ifane @KNOX @jesonyang 首先感谢所有的回复者,你们的回复确实给了我很大的帮助,能够让我顺利解决问题,和大家的想法对比,才能发现我原来的想法是错误的,我原来是想着遍历 item ,然后依次将 checkbox 的状态设置为 unchecked ,但是这样确实会有问题,而且思想上也不是可行的,然后我根据你们的回答,每次对 dataSet 进行操作。我的模型其实比我问题里的复杂得多,有多重嵌套,还有一些非统一的状态,但是根本的思路还是不变的,所以这次路就走得比较弯,但是好在是问题已解决,大家也给我上了一课,在这里还是统一对大家表示感谢!另外,感谢后面两位的分享,真好可以让我做个笔记做个参考,感谢! |