RecyclerView 又遇到问题啦!所以又来请教!

2016-11-19 15:58:58 +08:00
 pcatzj

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

6095 次点击
所在节点    Android
13 条回复
ivechan
2016-11-19 16:18:20 +08:00
你更改状态不是通过 RecyclerView.Adapter ? 而是直接对 checkbox 操作吗?
ivechan
2016-11-19 16:24:39 +08:00
adapter 提供个重置 checkbox 接口, onBindViewHolder 方法里判断 checkbox 状态就行了吧
kassadin
2016-11-19 16:27:35 +08:00
不要用 onCheck,设置 checkListener 为 null, 用 onClick
Guaidaodl
2016-11-19 16:31:20 +08:00
Adapter 用记录每一个 Checkbox 状态, 然后点击重置的时候更新 Adapter 里的数据, 然后 notify 就可以了.
pcatzj
2016-11-19 22:34:48 +08:00
不好意思,这个帖子发重了, https://www.v2ex.com/t/321690#reply7 这里是原来的,发的时候提示我主题已存在,所以发了这个,现在看来是网络问题。问题已解决,谢谢大家的热心回复!
pcatzj
2016-11-19 22:40:29 +08:00
@ivechan
@kassadin
原来是这么做的,但是发现这么做不可行,因为不在可视范围内的 item 会被 recycle ,所以操作会产生问题。这篇帖子是发重了的,后来这个问题已经在前一篇帖子里得到答复并解决,就是在 dataBean 里不仅存储需要展示的数据,还存储了 CheckBox 状态的变量,每次通过更改 dataBean ,然后 notifyDataSetChanged 来控制布局的刷新和重置,其实这本来是一个 RecyclerView 常规的思想,甚至 ListView 也是这套想法,但是却被我跑偏了,感谢大家的不吝赐教,涨姿势了!
pcatzj
2016-11-19 22:42:02 +08:00
@Guaidaodl
对,后来就是通过这个方法解决了,但是之前还是想法太狭隘,因为要重置 checkbox 的状态,就自然而然的想到了遍历 item 对 checkbox 进行操作,结果导致了一个大 bug ,感谢您的不吝赐教!
iAcn
2016-11-19 22:45:01 +08:00
以前碰见过这种问题,当时是 RecyclerView.setItemViewCacheSize(0) 把缓存个数设置成可见 Item + 0 个,这样保证每个 Item 滑动都会走 onBindViewHolder(),然后再从这里边设置。不知道适不适用你的情况 😂
pcatzj
2016-11-19 23:03:51 +08:00
@iAcn 这个方法我倒真不知道,待我去试一试!
iAcn
2016-11-19 23:09:04 +08:00
@pcatzj 我是这样做的,也遍历了可见 Item ,因为我的 Item 有个动画,直接 notifyDataSetChange() 就显示不出动画来了
Guaidaodl
2016-11-20 10:40:21 +08:00
@pcatzj 没事, 刚开始的时候不熟悉很容易遇到一些问题, 大家都是这样过来的.
pcatzj
2016-11-21 15:19:31 +08:00
@iAcn 试了一下果然是可以的,之前还在想为什么 item 不可见了没有被回收,没有走 bind ,原来是这个原因。记下了,万一以后有不得已直接对 view 操作的时候,这个方法就用得上了,感谢!
iAcn
2016-11-21 17:04:54 +08:00
@pcatzj 没事的,不用谢~

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

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

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

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

© 2021 V2EX