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

知乎 android app 是如何做到保存每个 tab 的浏览状态的

  •  
  •   jasonhui512 · 2017-03-03 12:46:05 +08:00 · 9427 次点击
    这是一个创建于 2818 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,底部的 tab 切换并不影响之前的浏览状态,比如最右面的 tab 我关注的,选一个问题进去浏览,切换到其他 tab 再回来,还是保持刚才的浏览状态不变,是 fragment 自带功能还是 onRestoreInstanceState 这些功能实现的?

    8 条回复    2017-03-04 02:05:47 +08:00
    michaelye1988
        1
    michaelye1988  
       2017-03-03 14:11:09 +08:00
    fragment 相互切换不会对之前的浏览造成影响,注意检查一下 fragment 切换的时候是不是把之前的给销毁了又创建了一遍导致的
    Bown
        2
    Bown  
       2017-03-03 14:24:02 +08:00
    试试 ViewPager#setOffscreenPageLimit
    zhaohui318
        3
    zhaohui318  
       2017-03-03 14:24:55 +08:00
    有可能是嵌套 fragment ,每一个 tab 是一个 fragment ,使用 getChildFragmentManager 来管理自己 tabFragment 里的 fragment ,这样就不必自己维护栈结构了
    jasonhui512
        4
    jasonhui512  
    OP
       2017-03-03 14:45:06 +08:00
    @michaelye1988 fragment 里面有跳转啊,你试一下
    hanity
        5
    hanity  
       2017-03-03 14:58:50 +08:00
    创建用 add, 切换用 show 、 hide
    wsxyeah
        6
    wsxyeah  
       2017-03-03 16:01:57 +08:00 via iPhone
    用 show/hide ,别用 replace
    michaelye1988
        7
    michaelye1988  
       2017-03-03 16:11:44 +08:00
    @jasonhui512 我知道有跳转,你误会我的意思了,其它人也提示你了,如 @hanity 和 @wsxyeah 所说的方法,不要 replace 。
    还有就是 @Bown 所说的,如果采用的是 ViewPager 和 Fragment 结合的方式,需要设置 setOffscreenPageLimit , ViewPager 中有几个 Fragment ,就需要设置为多少。它能帮你缓存住 Fragment ,不会被销毁。
    ilumer
        8
    ilumer  
       2017-03-04 02:05:47 +08:00
    如果是 viewpager 的话,可以直接保存实例(fragmentpageradapter)或者设置缓存数量还有楼主的答案(fragmentstatepageradapter)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3653 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 04:17 · PVG 12:17 · LAX 20:17 · JFK 23:17
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.