RecyclerView 又遇到问题啦!所以又来请教! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
pcatzj

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

  •  
  •   pcatzj Nov 19, 2016 13810 views
    This topic created in 3446 days ago, the information mentioned may be changed or developed.

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

    Supplement 1    Nov 19, 2016
    不好意思,这个帖子发重了, t/321690#reply7 这里是原来的,发的时候提示我主题已存在,所以发了这个,现在看来是网络问题。问题已解决,谢谢大家的热心回复!
    13 replies    2016-11-21 17:04:54 +08:00
    ivechan
        1
    ivechan  
       Nov 19, 2016
    你更改状态不是通过 RecyclerView.Adapter ? 而是直接对 checkbox 操作吗?
    ivechan
        2
    ivechan  
       Nov 19, 2016
    adapter 提供个重置 checkbox 接口, onBindViewHolder 方法里判断 checkbox 状态就行了吧
        3
    kassadin  
       Nov 19, 2016
    不要用 onCheck,设置 checkListener 为 null, 用 onClick
    Guaidaodl
        4
    Guaidaodl  
       Nov 19, 2016
    Adapter 用记录每一个 Checkbox 状态, 然后点击重置的时候更新 Adapter 里的数据, 然后 notify 就可以了.
    pcatzj
        5
    pcatzj  
    OP
       Nov 19, 2016
    不好意思,这个帖子发重了, t/321690#reply7 这里是原来的,发的时候提示我主题已存在,所以发了这个,现在看来是网络问题。问题已解决,谢谢大家的热心回复!
    pcatzj
        6
    pcatzj  
    OP
       Nov 19, 2016
    @ivechan
    @kassadin
    原来是这么做的,但是发现这么做不可行,因为不在可视范围内的 item 会被 recycle ,所以操作会产生问题。这篇帖子是发重了的,后来这个问题已经在前一篇帖子里得到答复并解决,就是在 dataBean 里不仅存储需要展示的数据,还存储了 CheckBox 状态的变量,每次通过更改 dataBean ,然后 notifyDataSetChanged 来控制布局的刷新和重置,其实这本来是一个 RecyclerView 常规的思想,甚至 ListView 也是这套想法,但是却被我跑偏了,感谢大家的不吝赐教,涨姿势了!
    pcatzj
        7
    pcatzj  
    OP
       Nov 19, 2016
    @Guaidaodl
    对,后来就是通过这个方法解决了,但是之前还是想法太狭隘,因为要重置 checkbox 的状态,就自然而然的想到了遍历 item 对 checkbox 进行操作,结果导致了一个大 bug ,感谢您的不吝赐教!
    iAcn
        8
    iAcn  
       Nov 19, 2016 via Android
    以前碰见过这种问题,当时是 RecyclerView.setItemViewCacheSize(0) 把缓存个数设置成可见 Item + 0 个,这样保证每个 Item 滑动都会走 onBindViewHolder(),然后再从这里边设置。不知道适不适用你的情况
    pcatzj
        9
    pcatzj  
    OP
       Nov 19, 2016
    @iAcn 这个方法我倒真不知道,待我去试一试!
    iAcn     10
    iAcn  
       Nov 19, 2016 via Android
    @pcatzj 我是这样做的,也遍历了可见 Item ,因为我的 Item 有个动画,直接 notifyDataSetChange() 就显示不出动画来了
    Guaidaodl
        11
    Guaidaodl  
       Nov 20, 2016
    @pcatzj 没事, 刚开始的时候不熟悉很容易遇到一些问题, 大家都是这样过来的.
    pcatzj
        12
    pcatzj  
    OP
       Nov 21, 2016
    @iAcn 试了一下果然是可以的,之前还在想为什么 item 不可见了没有被回收,没有走 bind ,原来是这个原因。记下了,万一以后有不得已直接对 view 操作的时候,这个方法就用得上了,感谢!
    iAcn
        13
    iAcn  
       Nov 21, 2016 via Android
    @pcatzj 没事的,不用谢~
    About     Help     Advertise     Blog     API     FAQ     Solana     3910 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 44ms UTC 10:31 PVG 18:31 LAX 03:31 JFK 06:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86