V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
pcatzj
V2EX  ›  Android

RecyclerView 又一问

  •  
  •   pcatzj · 2016-11-19 15:25:03 +08:00 · 9294 次点击
    这是一个创建于 2951 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    7 条回复    2016-11-19 22:32:58 +08:00
    xingda920813
        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()。
    这样不优雅,期待更好的解决方案。
    zhaohui318
        2
    zhaohui318  
       2016-11-19 15:41:21 +08:00
    把 checked 信息反映到 model 上,然后遍历 model ;
    或者把 checked 信息单独存到一个地方( list or set );
    遍历 view 应该不是很好的实践。
    chefish
        3
    chefish  
       2016-11-19 15:41:41 +08:00
    你肯定不能遍历 item 啊, item 是当前显示的 view ,你应该直接改数据,然后 notifyDataSetChanged
    ifane
        4
    ifane  
       2016-11-19 16:53:24 +08:00
    修改 CheckBox 的状态数据,然后 apter.notifyDataSetChanged();直接刷新整个 RV 。
    KNOX
        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 的使用,我试过可行。
    jesonyang
        6
    jesonyang  
       2016-11-19 21:50:28 +08:00
    RecyclerView 、 ListView 实现单选列表的优雅之路 http://dwz.cn/4DF4cN
    pcatzj
        7
    pcatzj  
    OP
       2016-11-19 22:32:58 +08:00
    @xingda920813
    @zhaohui318
    @chefish
    @ifane
    @KNOX
    @jesonyang

    首先感谢所有的回复者,你们的回复确实给了我很大的帮助,能够让我顺利解决问题,和大家的想法对比,才能发现我原来的想法是错误的,我原来是想着遍历 item ,然后依次将 checkbox 的状态设置为 unchecked ,但是这样确实会有问题,而且思想上也不是可行的,然后我根据你们的回答,每次对 dataSet 进行操作。我的模型其实比我问题里的复杂得多,有多重嵌套,还有一些非统一的状态,但是根本的思路还是不变的,所以这次路就走得比较弯,但是好在是问题已解决,大家也给我上了一课,在这里还是统一对大家表示感谢!另外,感谢后面两位的分享,真好可以让我做个笔记做个参考,感谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2686 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 15:25 · PVG 23:25 · LAX 07:25 · JFK 10:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.