当调用setAdapter时,ViewPager并不总是刷新,FragmentStatePagerAdapter

首先,我使用FragmentStatePagerAdapter来提供一个ViewPager的片段来显示。

当应用程序处于运行状态(即在onResume() )时,在ViewPager上调用setAdapter将始终工作,并使ViewPager刷新,调用适配器中的getItem(int position)方法。

然而,在方向改变之后,如果我在我的活动的onCreate(Bundle savedInstance)方法中调用了setAdapter,则不调用getItem(int position)方法,并重用旧的片段。

我在想也许FragmentManager正在做一些我不明白的事情? 片段pipe理器是唯一不会在方向更改期间被破坏的东西。

谢谢

Solutions Collecting From Web of "当调用setAdapter时,ViewPager并不总是刷新,FragmentStatePagerAdapter"

这可能是因为您正在使用getFragmentManager()在使用嵌套片段时实例化FragmentStatePagerAdapter。

尝试使用getChildFragmentManager()来代替:

 CustomFragmentPagerAdapter fragmentPagerAdapter = new CustomFragmentPagerAdapter(getChildFragmentManager()); 

答案在这里find。

那么这是我发现的事情(这非常非常奇怪)。

如果您需要刷新 PagerAdapter项目, PageAdapter当您传递相同的FragmentManager并将其传递给setAdapter调用时,您肯定无法创buildPageAdapter新实例,例如:

 FragmentManager fm = getChildFragmentManager(); mViewPager.setAdapter(new MyPagerAdapter(fm)); 

要么

 FragmentManager fm = getActivity().getSupportFragmentManager(); mViewPager.setAdapter(new MyPagerAdapter(fm)); 

但是,如果您在初始化PagerAdapter时不断切换FragmentManager ,那么它就可以工作。

从我的angular度来看,这是可怕的…如果任何人有正确的ViewPager (而不是在这种肮脏的方式)刷新项目的想法,与其他人分享您的想法:)

我使用FragmentPagerAdapter和mViewPager.setAdapter()不工作。我在下面的步骤中修复它:
(1)获取当前的Fragment列表。

 List<Fragment> fragmentList = getSupportFragmentManager().getFragments(); List<Fragment> fragmentListCopy = new ArrayList<Fragment>(fragmentList); 

(2)去除片段

 //I have two fragment getSupportFragmentManager().beginTransaction().remove(fragmentList.get(0)).commit(); getSupportFragmentManager().beginTransaction().remove(fragmentList.get(1)).commit(); 

(3)将新的FragmentPagerAdapter设置为ViewPager

 mViewPager.setAdapter(...) 

在设置新的适配器之前,只需删除碎片。