替换ViewPager中的碎片是一个多次被问到的问题,但大多数答案都是黑客,破碎/不完整或相当陈旧。这个例子运行得很好 - https://github.com/danilao/fragments-viewpager-example但它实际上使用了一个空的根片段并在createView上添加了真正的片段。
还有其他更好的方法可以避免使用根框架吗?
答案 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()
的子片段管理器。