因为最近开发遇到一个问题,做了一个搜索后,下面有多个分类结果多tab,多fragment的功能
当我发现我传递的search值改变时,但是搜索的结果却没有改变,排查原因,
发现这里的search其实已经发生改变
但是这里获取的时候并没有变化
原因在于FragmentPagerAdapter 和FragmentStatePagerAdapter上
FragmentPagerAdapter 和FragmentStatePagerAdapter区别:
-
FragmentPagerAdapter 中每一个Fragment都长存在与内存中,适用于比较固定的少量的Fragment。FragmentPagerAdapter 在我们切换Fragment过程中不会销毁Fragment,只是调用事务中的detach方法。而在detach方法中只会销毁Fragment中的View,而不会销毁Fragment对象。
-
FragmentStatePagerAdapter中实现将只保留当前页面,当页面离开视线后,就会被消除,释放其资源。而在页面需要显示时,生成新的页面。在较多的Fragment的时候为了减少内存可适用。FragmentStatePagerAdapter在我们切换Fragment,会把前面的Fragment直接销毁掉。
所以这里要获取不同的结果就要用FragmentStatePagerAdapter这个适配器