我有一个带有4个选项卡的TabLayout,我想要的是保留ViewPager内存中的前3个选项卡,并在每次选中此选项卡时在第4个选项卡中重新创建片段,这可能吗?
这是我的适配器:
public class SectionsPagerAdapter extends FragmentPagerAdapter {
private Fragment[] mFragments;
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
mFragments = new Fragment[4];
mFragments[0] = PlaceholderFragment.newInstance(0);
mFragments[1] = PlaceholderFragment.newInstance(1);
mFragments[2] = PlaceholderFragment.newInstance(2);
mFragments[3] = PlaceholderFragment.newInstance(3);
}
@Override
public Fragment getItem(int position) {
return mFragments[position];
}
@Override
public int getCount() {
// Show 4 total pages.
return 4;
}
@Override
public CharSequence getPageTitle(int position) {
switch (position) {
case 0:
return null;
case 1:
return null;
case 2:
return null;
case 3:
return null;
}
return null;
}
}
答案 0 :(得分:0)
我知道我来晚了。
您可以在ViewPagerInstance上使用offscreenPageLimit
来指定要在任一侧保持活动状态的页面数。默认值为1(最小值也为1。所以不能重新创建每个片段。恕我直言,这可能是为平滑动画制作的)
检查此文档链接以获取详细信息offscreenPageLimit https://developer.android.com/reference/android/support/v4/view/ViewPager#setoffscreenpagelimit
如文档中所指定,调整此属性时要小心。根据使用方式和使用地点,它可以使用户的体验更好或更糟。
现在是有关仅重新创建特定片段的问题的第二部分。检查此文档链接https://developer.android.com/reference/android/support/v4/app/Fragment#setUserVisibleHint(boolean)
只要您的片段对用户可见还是不可见,都应该调用此 。
public class YourFragmentThatNeedsToBeRecreated extends Fragment {
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
// write your refresh logic here
}
}
尽管使用此方法可能会遇到问题。由于某些原因,它无法完美运行(在此处插入有关片段的咆哮声)。您可以尝试在刷新逻辑中附加和分离片段。但我希望有一个更清洁的解决方案。