我的申请中有.values
个TabLayout
。
如果我滑动更改标签,那么表现得很奇怪。
以下是该方案。
假设有3个标签A,B,C。
默认选项卡A将在我启动App时打开。
从A转到B - 工作正常。
转到A从B - 工作确定。
从A转到B - 工作正常。
从B转到C - 工作正常。
现在问题从这里开始。
从C转到B - 它将加载A和B两者但仅显示B。
如果我来自C ??
,为什么加载A和B.
以下是我的代码。
ViewPager
我想每次加载标签。
为此,我使用下面的代码。
private Toolbar toolbar;
private TabLayout tabLayout;
private ViewPager viewPager;
ViewPagerAdapter adapter;
toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(false);
viewPager = (ViewPager) findViewById(R.id.viewpager);
setupViewPager(viewPager);
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(viewPager);
private void setupViewPager(ViewPager viewPager) {
adapter = new ViewPagerAdapter(getSupportFragmentManager());
adapter.addFragment(new FragmentOpen(), "OPEN");
adapter.addFragment(new FragmentClose(), "CLOSE");
adapter.addFragment(new FragmentTest(), "TEST");
viewPager.setAdapter(adapter);
}
class ViewPagerAdapter extends FragmentPagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
public void addFragment(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
}
但是当我来自C时,它总是会加载两个标签。
我想要的是:只有Tab B必须在来自C时加载,而不是两者。
答案 0 :(得分:1)
使用ViewPager
时无法实现。根据您的滑动方向,ViewPager
至少加载one
adjacent
片段的current
片段。
如果您阅读了ViewPager
文档,则有一种方法ViewPager.setOffscreenPageLimit(LIMIT)
支持屏幕外页面限制,其default
值为1
。
<强> SetOffscreenPageLimit:强>
设置应保留在页面两侧的页数 处于空闲状态的视图层次结构中的当前页面。页面超出此范围 在需要时,将从适配器重新创建限制。
这是作为优化提供的。如果您事先知道这个号码 您将需要支持或具有延迟加载机制的页面 放在你的页面上,调整这个设置可以带来好处 感知到的分页动画和交互的平滑性。如果你有 少量页面(3-4),您可以一次保持活动状态, 在新创建的视图子树的布局中花费的时间会减少 用户来回翻页。
您应该保持此限制,特别是如果您的网页很复杂 布局。此设置默认为1.
请参阅documentation。
以下是一些相关的答案:
1。 ViewPager.setOffscreenPageLimit(0) doesn't work as expected
2。 How can make my ViewPager load only one page at a time ie setOffscreenPageLimit(0);
答案 1 :(得分:1)
如果您在A中,则
ViewPager
的默认行为会加载B 当你到达B时它将加载C并且A现在也被加载 什么时候到达C它会破坏A的视图,现在当你来的时候 再次向B,它将以一种简单的方式再次加载AViewPager
维护 一个Next
和一个previous
默认查看状态。
要克服这个问题,你应该使用ViewPager.setOffscreenPageLimit(number)
这里的数字是下一个和上一个视图的模拟加载页面数。