fragment saveState 以及 restoreState探究

     在android开发过程中使用ViewPager+Fragment开发页面是常见的情况,但在开发过程中碰到fragemnt正常显示,而fragment的变量却显示为null,对此进行探究。

     查询答案发现是与fragment引用的获取有关,是由FragmentManage的saveState 以及 restoreState引起的,记录一下。

     首先是有问题的引用获取方式,通过FragmentStatePagerAdapter的getitem方法获取引用,在使用时还判断了如果为null就通过getitem去获取:

     但这种引用的获取方法是有问题的,在ViewPager中fragemnt的初始化是在FragmentPagerAdapter的instantiateItem方法中获得的,不一定会走getitem去获取。

     总结一下就是当页面临时崩溃了,比如开启不保留活动,或者内存不足被系统强制回收了等,fragment会被FragmentManager回收,当回到当前页面时由于重新走了activity的onCreate把原来的fragment重建了,不需要getitem来构建fragment,此时由于activity也是重建的,fragment的引用就为null了。

   应对方法:

1. 在FragmentStatePagerAdapter的instantiateItem方法中获取引用 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值