Android日常(10)刷新FragmentPagerAdapter(在viewpager中getArguments 获取到的Bundle不是新生成Fragment对象的Bundle)

在Android开发中,使用ViewPager管理Fragment时遇到刷新问题。当试图更新Fragment的Bundle数据时,发现即使重新设置Adapter,Fragment内部获取到的Bundle仍然是旧值。通过在关键代码处设置断点,发现Fragment的生命周期方法并未接收到新的Bundle。为解决此问题,重写FragmentPagerAdapter的getItemId方法,用对象hashcode替代父类方法,从而确保每次创建的Fragment对象不同,达到刷新效果。
摘要由CSDN通过智能技术生成

Android日常(10) 刷新FragmentPagerAdapter(在viewpager中getArguments 获取到的Bundle不是新生成Fragment对象的Bundle)

写在前面的话

今天在开发视频详情页面的时候,遇到一个问题。因为这个问题发现ViewPager在刷新的时候因为FragmentPagerAdapter机制导致的不刷新。
下面我讲进行讲解:从出现问题,到发现问题原因和解决问题的办法

问题出现的场景

Activiy上面有个ViewPager去管理三个子Fragment,因为业务原因需要重建并刷新Fragment,其实这种做法多少有些不合理,但是确实能解决问题,省去很多不必要的麻烦,不得不说,谷歌在设计Fragment的时候是花了很多心思的,在优化性能方面下足了功夫。以后我们讲对代码设计进行优化,提高性能!

发现问题原因

这里发现问题我是采用了在关键参数位置打断点,比如设置参数,和fragment的生命周期钩子函数里面对设置参数进行断点查看,发现了在刷新时viewpager虽然重新设置了Adapter,但是adapter里面fragment的生命周期钩子函数里面取到的Bundle还是旧的数据。

解决问题的办法

重写FragmentPagerAdapter的getItemId方法使用对象hashcode代替使用父类super方法

    
class ContentPagerAdapter extends FragmentPagerAdapt
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值