我正在尝试创建一个无尽的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;
}
}
答案 0 :(得分:1)
所以我设法做到这一点,效果很好
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;
}
使它工作的主要因素是mViewPager.removeAllViews();
,它删除了以前的碎片,所以它不会搞砸。
使用在其他类(例如,单例)中定义的globalVariable来了解您从哪个位置开始