踩坑记录:为了实现数据的返回刷新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清除掉。
附上代码片段: