TabLayout + ViewPager +Fragment 实现页面的动态刷新

踩坑记录:为了实现数据的返回刷新fragment,每次重新newInstance的时候传入了值,但是在initData(即获取Bundle传递参数)的时候数据就是空的,这个问题纠结了一天。日志出每次fragment的物理地址,是变化的,既然fragment 没有做更新,可能就出在内存上面,然后尝试在fragment 里面增加个方法,将我需要的数据传入进去,但是又进入了一个新的坑,fragment中的view获取的都是空值,这个因为viewpager中的fragment已经被清除了,每次切换fragment,就会重新newInstace。折腾了好久,最后尝试去清空viewpager的view,重新加载内存数据,这个原因是因为 viewpager为了滑动流畅性,fragment都是放在内存中去的。

在stackOverFlow看到这篇文章:https://stackoverflow.com/questions/10396321/remove-fragment-page-from-viewpager-in-android

The ViewPager doesn't remove your fragments with the code above because it loads several views (or fragments in your case) into memory. In addition to the visible view, it also loads the view to either side of the visible one. This provides the smooth scrolling from view to view that makes the ViewPager so cool.

To achieve the effect you want, you need to do a couple of things.

依据大神的指引,找到了问题的根源,也解决了现在的问题

首先要移除viewpager的view,然后将FragmentPagerAdapter替换成FragmentStatePagerAdapter,最后重写adapter中的getitemPosition的方法,返回 PagerAdapter.POSITION_NONE ,其他的逻辑都是一样的。忘了说一句,tablayout 在addtab的时候需要将已经add过的tab清除掉。

附上代码片段:

 



评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值