Android ViewPager 加载了太多页面
Android ViewPager loads too many pages
我将 ViewPager 与片段一起使用。我将偏移量设置为 1(我知道这是默认值)但它仍然在开始时加载三页(0 -> 1 -> 2)而不是两页(0 -> 1)......这里可能是什么问题?
private ViewPager mPager;
private PagerAdapter mPagerAdapter;
...
mPager = (ViewPager) findViewById(R.id.viewpager);
mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter);
mPager.setOffscreenPageLimit(1);
...
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
if (position == 0) {
return new InitializationFragment();
} else if (position == 8) {
return new InitializationFragment();
} else if (position == 9) {
return new SummaryFragment();
} else {
return new IngredientFragment(PizzaStage.values()[position - 1], layout);
}
}
@Override
public int getCount() {
return NUM_PAGES; //10
}
}
使用 FragmentPagerAdapter 而不是 FragmentStatePagerAdapter。
您指的是 setOffscreenPageLimit 作为偏移量吗?如果您在适配器中将 NUM_PAGES 定义为 10,则将加载所有这 10 个。至于 setOffscreenPageLimit,您可以使用它来设置要在空闲状态下保留的页面数。不限制需要加载的片段。如果您有 5 个片段并且您不希望 android 每次滑动 left/right 时都重新创建这些片段,那么您需要使用 setOffscreenPageLimit。
ViewPager
将始终尝试将页面预加载到当前页面左侧 and/or 右侧,以便在用户滑动时不会延迟创建视图。
如果你想禁用这个行为,你可以调用viewPager.setOffscreenPageLimit(0)
.
通常您只想知道视图何时被滑动并且现在是当前视图。
android - How to determine when Fragment becomes visible in ViewPager - Stack Overflow
我将 ViewPager 与片段一起使用。我将偏移量设置为 1(我知道这是默认值)但它仍然在开始时加载三页(0 -> 1 -> 2)而不是两页(0 -> 1)......这里可能是什么问题?
private ViewPager mPager;
private PagerAdapter mPagerAdapter;
...
mPager = (ViewPager) findViewById(R.id.viewpager);
mPagerAdapter = new ScreenSlidePagerAdapter(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter);
mPager.setOffscreenPageLimit(1);
...
private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter {
public ScreenSlidePagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
if (position == 0) {
return new InitializationFragment();
} else if (position == 8) {
return new InitializationFragment();
} else if (position == 9) {
return new SummaryFragment();
} else {
return new IngredientFragment(PizzaStage.values()[position - 1], layout);
}
}
@Override
public int getCount() {
return NUM_PAGES; //10
}
}
使用 FragmentPagerAdapter 而不是 FragmentStatePagerAdapter。
您指的是 setOffscreenPageLimit 作为偏移量吗?如果您在适配器中将 NUM_PAGES 定义为 10,则将加载所有这 10 个。至于 setOffscreenPageLimit,您可以使用它来设置要在空闲状态下保留的页面数。不限制需要加载的片段。如果您有 5 个片段并且您不希望 android 每次滑动 left/right 时都重新创建这些片段,那么您需要使用 setOffscreenPageLimit。
ViewPager
将始终尝试将页面预加载到当前页面左侧 and/or 右侧,以便在用户滑动时不会延迟创建视图。
如果你想禁用这个行为,你可以调用viewPager.setOffscreenPageLimit(0)
.
通常您只想知道视图何时被滑动并且现在是当前视图。
android - How to determine when Fragment becomes visible in ViewPager - Stack Overflow