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