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