求助, Fragment 与 Viewpager 和 Activity 一起使用的一个问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Totato5749
V2EX    Android

求助, Fragment 与 Viewpager 和 Activity 一起使用的一个问题

  •  
  •   Totato5749 2015-12-24 10:23:26 +08:00 12620 次点击
    这是一个创建于 3665 天前的主题,其中的信息可能已经有所发展或是发生改变。

    App 结构很类似微信,底下是个 Tab, 同时也使用 Viewpager+Fragment 实现了类似微信的页面左右滑动功能。(先勿吐槽在安卓上用了 iOS 风格:))

    现在想要实现似微博客户端在首页的时候再次点击首页对应的 tab ,刷新首页中的列表。所以我在首页的 Fragment 中写了个 public 方法,在 Activity 中判断是否是再次点击了首页 tab ,如果是则用首页对应的 Fragment 对象调用该方法刷新该页面中的内容。

    现在遇到的问题是, App 如果是第一次正常启动,点击 tab 刷新内容工作很正常。如果 App 转入后台,一段时间后系统将其清理掉后,从最近打开的应用再次打开该 App ,该 App 会从原来的页面恢复,而不是从 Manifest 中设置的启动 Activity 再次启动。

    这时我再点击 tab 尝试刷新页面应用就会闪退,报 NullPointerException , 经过检查之后我发现,此时在 Activity 中持有的 Fragment 对象已经不是真正页面上显示的那个了。

    我在 Activity 中是自己 new 了这些 Fragment 页面的对象然后通过 FragmentPagerAdapter 设置到 Viewpager 中,所以说当应用是恢复回来的时候仿佛根本没通过 FragmentPagerAdapter 来初始化各个页面的,(但是通过打 Log 我确认应用恢复 Activity 从 Oncreate 开始都走过了)所以就出现了 Activity 中持有的对象不是真正显示的那个。

    现在求大牛指点下,应用恢复的时候我的 Viewpager 中的 fragment 是如何产生的。

    5 条回复    2016-01-12 13:37:28 +08:00
    Tneciv
        1
    Tneciv  
       2015-12-24 12:31:59 +08:00
    用 FragmentStatePagerAdapter 试试
    stardust21
        2
    stardust21  
       2015-12-24 13:56:51 +08:00
    试试切换 Tab 的时候 onHiddenChanged()会不会被调用,会的话可以在这里面做刷新。
    TJT
        3
    TJT  
       2015-12-24 14:13:35 +08:00 via Android
    首先打开开发者选项的 Don't keep activities.
    然后应该可以重现你的问题。

    关键的地方是 Activity 会自动帮你保存 Hierarchy 状态的,所以你可以 override onSaveInstanceState, 实现自己的逻辑,不调用 super implememt 应该就可以了。
    wanttofly
        4
    wanttofly  
       2015-12-25 09:28:03 +08:00
    楼上说的对, onSaveInstanceState()方法会保存当前 Activity 的状态。不过虽然 fragment 界面还在, fragment 作为 Activity 的成员变量是否还在呢?我也想问下。
    hyyou2010
        5
    hyyou2010  
       2016-01-12 13:37:28 +08:00
    楼主,我以前碰到的问题似乎和你差不多,我通过重载 fragment 的 onAttach 方法似乎解决了这个问题,详情写了一篇帖子: http://blog.csdn.net/max2005/article/details/20053461
    你看下是不是这个问题
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5335 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 07:56 PVG 15:56 LAX 23:56 JFK 02:56
    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