我有fragment A
,其中有一个包含两个fragment 1.1
和fragment 1.2
的视图寻呼机
这些片段是fragment A
的儿童片段。
现在,当用户访问Fragment B然后返回A时,我需要更新
子片段1.1和1.2由片段B内的选项组成。
问题是我不能更新片段,因为它们已经在childfragment manager中,当我返回到未调用的视图寻呼机的片段A getItem(int position)
时也是如此。
在设置视图寻呼机适配器之前,我设法删除了所有子片段,但我不确定这是完成此功能的正确方法。
我在Fragment A中有1.1和1.2引用
感谢。
答案 0 :(得分:5)
有同样的问题。对我来说,它可以覆盖FragmentStatePagerAdapter
@Override
public Parcelable saveState() {
return null;
}
@Override
public void restoreState(Parcelable state, ClassLoader loader) {
}
这项工作适合我。
答案 1 :(得分:4)
执行此操作的一种简单方法(不是最好的方法)是覆盖getItemPosition()
中的PagerAdapter
:
public int getItemPosition(Object object) {
return POSITION_NONE;
}
调用适配器的notifyDataSetChanged()
方法后,ViewPager
会在已知的视图上调用getItemPosition()
。通过返回POSITION_NONE,您告诉ViewPager
删除视图。在ViewPager
删除视图后,它会调用getItem()
以获取更新的视图。
因此,当用户返回Fragment A时,您会调用:
viewPager.getAdapter().notifyDataSetChanged();
这将开始更新所有视图的过程。
答案 2 :(得分:1)
我花了两天时间与此斗争,现在我才找到答案:
只需使用FragmentStatePagerAdapter而不是FragmentPagerAdapter,它就像魅力一样!
答案 3 :(得分:0)
您可以致电:
viewPager.removeAllViews()
viewPagerAdapter.notifyDataSetChanged()