gpt4 book ai didi

Android 无尽的 FragmentPagerAdapter 在滑动时使用新的适配器

转载 作者:行者123 更新时间:2023-11-30 02:42:45 25 4
gpt4 key购买 nike

我正在尝试创建一个无穷无尽的 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个 fragment ,所以当我向右滚动时,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;
}

使它工作的主要因素是 mViewPager.removeAllViews();,它删除了以前的 fragment ,所以它不会搞砸。使用在其他一些类中定义的 globalVariable,例如单例,从一开始就知道你在哪个位置

关于Android 无尽的 FragmentPagerAdapter 在滑动时使用新的适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25529554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com