所以我有FragmentPagerAdapter的下一个问题。我有一个带有3个标签的TabLayout,代表我可以切换的3个片段。因此当我切换到第三个片段时,由于某种原因,第一个片段消失(或其视图)。有谁知道如何解决这个问题?提前致谢。
public class SectionsPagerAdapter extends FragmentPagerAdapter {
private static final int FRAGMENT_COUNT = 3;
private final List<Fragment> listOfFragments = new ArrayList<>();
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
return listOfFragments.get(position);
}
@Override
public int getCount() {
return FRAGMENT_COUNT;
}
public void addFragment(Fragment fragment) {
listOfFragments.add(fragment);
}
}
这是FragmentPagerAdapter的代码。
答案 0 :(得分:0)
我不知道你的问题是什么。但是如果在您的应用中只有3个片段,那么您可以尝试setOffscreenPageLimit
<{1}}
ViewPager
答案 1 :(得分:0)
我真的不知道会发生什么,但这是我的代码,希望这有助于你
public class AdapterFragmentViewPager extends FragmentPagerAdapter {
private List<Fragment> fragmentList = new ArrayList<>();
public AdapterFragmentViewPager(FragmentManager fm) {
super(fm);
}
public void addFragment(Fragment fragment) {
fragmentList.add(fragment);
}
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentList.size();
}
}
这是我的Tablayout:
private AdapterFragmentViewPager adapterFragmentViewPager = new AdapterFragmentViewPager(getSupportFragmentManager());
TabLayout.Tab home = tabLayout.newTab();
tabLayout.addTab(home);
TabLayout.Tab newest = tabLayout.newTab();
tabLayout.addTab(newest);
TabLayout.Tab author = tabLayout.newTab();
tabLayout.addTab(author);
TabLayout.Tab category = tabLayout.newTab();
tabLayout.addTab(category);
TabLayout.Tab saved = tabLayout.newTab();
tabLayout.addTab(saved);
adapterFragmentViewPager.addFragment(FragmentHome.newInstance());
adapterFragmentViewPager.addFragment(FragmentQuote.newInstance());
adapterFragmentViewPager.addFragment(FragmentAuthor.newInstance());
adapterFragmentViewPager.addFragment(FragmentCategory.newInstance());
adapterFragmentViewPager.addFragment(FragmentFavorites.newInstance());
viewPager.setAdapter(adapterFragmentViewPager);
tabLayout.setupWithViewPager(viewPager);
答案 2 :(得分:0)
这里的一个问题是一个有点混乱的API。
在FragmentPagerAdapter
中,getItem(int position)
实际上意味着“创建项目”。换句话说,您不应尝试在适配器的列表中手动缓存片段。
@Override
public Fragment getItem(int position) {
return listOfFragments.get(position); //No! don't do this
}
尽管它可能看起来反直觉,但您实际上应该在getItem
内创建一个新的Fragment实例,并且非常贴近Google的官方示例:
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return FirstFragment.getInstance();
case 1:
return SecondFragment.getInstance();
}
}
否则,您将遇到FragmentManager的缓存和您自己的List<Fragment>
缓存不同步的问题。简而言之,片段的缓存由FragmentManager处理,您不需要自己进行缓存。
答案 3 :(得分:0)
而且我认为我修复了这个:)我唯一能做的就是覆盖FragmentPagerAdapter destroyItem()方法,空体(没有超级)。