Android 安卓无限碎片PageRadapter使用新的刷卡适配器

Android 安卓无限碎片PageRadapter使用新的刷卡适配器,android,android-fragments,android-pageradapter,Android,Android Fragments,Android Pageradapter,我正在尝试创建一个无休止的FragmentPagerAdapter,通过滑动将适配器替换为新适配器,并根据滑动的哪一侧,增加或减少一个全局变量,以便您知道自己的位置。所以我试过这个 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mSection

我正在尝试创建一个无休止的
FragmentPagerAdapter
,通过滑动将适配器替换为新适配器,并根据滑动的哪一侧,增加或减少一个全局变量,以便您知道自己的位置。所以我试过这个

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
    mViewPager = (ViewPager) findViewById(R.id.pager);
    mViewPager.setOffscreenPageLimit(0);
    mViewPager.setAdapter(mSectionsPagerAdapter);
    mViewPager.setCurrentItem(1);
    mViewPager.setOnPageChangeListener(new OnPageChangeListener() {

        @Override
        public void onPageSelected(int arg0) {
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
            if (mViewPager.getCurrentItem() == 0) {
                // left
                mViewPager.setAdapter(null);
                mViewPager.setAdapter(new SectionsPagerAdapter(getSupportFragmentManager()));
                mViewPager.setCurrentItem(1);
                MyVar.INST.position--;
            } else if (mViewPager.getCurrentItem() == 2) {
                // right
                mViewPager.setAdapter(null);
                mViewPager.setAdapter(new SectionsPagerAdapter(getSupportFragmentManager()));
                mViewPager.setCurrentItem(1);
                MyVar.INST.position++;
            }
        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
        }
    });
}

问题是,即使我将offscreenPageLimit设置为0,Android默认情况下仍会在内存中缓存3片段,因此当我向右滚动时,OnPageChangeListener中的方法没有被调用,因此全局变量没有正确递增。。。。 你知道我该怎么解决吗

编辑:这是适配器

private class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        return Fragment1.newInstance(MyVar.INST.position + position);
    }

    @Override
    public int getCount() {
        return 3;
    }

}

所以我就这样做了,效果很好

private void setAdapter() {
    mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
    mViewPager.setAdapter(mSectionsPagerAdapter);
    mViewPager.setCurrentItem(1);
    mViewPager.setOnPageChangeListener(new OnPageChangeListener() {

        @Override
        public void onPageSelected(int arg0) {
            if (mViewPager.getCurrentItem() == 0) {
                // left
                mViewPager.removeAllViews();
                //globalVariable--;
                setAdapter();
            } else if (mViewPager.getCurrentItem() == 2) {
                // right
                mViewPager.removeAllViews();
                //globalVariable++;
                setAdapter();
            }
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
        }
    });
}
适配器保持不变

private class SectionsPagerAdapter extends FragmentPagerAdapter {

public SectionsPagerAdapter(FragmentManager fm) {
    super(fm);
}

@Override
public Fragment getItem(int position) {
    return Fragment1.newInstance(MyVar.INST.position + position);
}

@Override
public int getCount() {
    return 3;
}
使其工作的主要因素是
mviewpage.removeAllViews(),它删除了前面的片段,因此不会弄糟。

使用其他类(例如singleton)中定义的globalVariable来了解您从一开始就在哪个位置

请粘贴适配器的代码“即使我已将offscreenPageLimit设置为0,Android默认情况下仍将3片段缓存在内存中”-3是最小值,对应于调用
setOffscreenPageLimit(1)
。“你知道我该怎么解决这个问题吗?”——老实说,我不清楚你的解决方案将如何运作。我会创建一个<代码> PagerAdapter <代码>,声称有数十亿页,并使用<代码> SETCurrEngEnter()/<代码>在中间开始。然后,实现您自己的页面回收逻辑。如果实际页面的数量很大,
FragmentStatePagerAdpater
的子类可能能够做到这一点,以避免任何缓存问题