正在使用' Root'片段更好的方式替换ViewPager中的片段?

时间:2015-08-02 17:43:45

标签: android android-fragments android-viewpager

替换ViewPager中的碎片是一个多次被问到的问题,但大多数答案都是黑客,破碎/不完整或相当陈旧。这个例子运行得很好 - https://github.com/danilao/fragments-viewpager-example但它实际上使用了一个空的根片段并在createView上添加了真正的片段。

还有其他更好的方法可以避免使用根框架吗?

2 个答案:

答案 0 :(得分:2)

正确的做法是覆盖PagerAdapter的{​​{3}}以使用新片段更新PagerAdapter:

  

主机视图尝试确定项目的位置是否已更改时调用。如果给定项目的位置未更改,则返回getItemPosition();如果适配器中不再存在该项目,则返回POSITION_UNCHANGED

     

默认实现假定项永远不会改变位置并始终返回POSITION_NONE

在这种情况下,未更改的页面返回PagerAdapter.POSITION_UNCHANGED,删除的片段返回PagerAdapter.POSITION_NONE,新片段将获得新位置。

您将更改PagerAdapter中的基础数据,然后调用POSITION_UNCHANGED。这是触发ViewPager为每个可见getItemPosition()调用Fragment,根据需要替换或移动它们的原因。

答案 1 :(得分:0)

您的示例使用正确的技术(根片段内的子片段),但方法错误:为了管理根片段内的子片段,它必须使用getChildFragmentManager()的子片段管理器。