Android ViewPager加载了太多页面

时间:2016-08-12 08:00:25

标签: android android-fragments android-viewpager fragmentstatepageradapter

我正在使用ViewPager和Fragments。我有偏移设置为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
    }
}

3 个答案:

答案 0 :(得分:0)

使用FragmentPagerAdapter而不是FragmentStatePagerAdapter。

答案 1 :(得分:0)

您是否将setOffscreenPageLimit称为偏移量?如果您在适配器中将NUM_PAGES定义为10,则将加载所有这10个。对于setOffscreenPageLimit,您可以使用它来设置要保留在空闲状态的页数。不限制需要加载的片段。如果你有5个片段并且你不想让android每次向左/向右滑动时重新创建这些片段,那么你需要使用setOffscreenPageLimit。

答案 2 :(得分:0)

ViewPager将始终尝试将页面预加载到当前页面的右侧和/或左侧,以便在用户滑动时,创建视图没有延迟。

如果要禁用此行为,可以拨打viewPager.setOffscreenPageLimit(0)

通常你想知道的是当视图被刷过并且现在是当前视图时。

android - How to determine when Fragment becomes visible in ViewPager - Stack Overflow