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
的子类可能能够做到这一点,以避免任何缓存问题