我想创建 ViewPager,每个页面都将包含唯一的数据(例如简单的 TextView ,整数从 1 到 1000000),我想让用户看到第一个页面,数字为 500000(所以他将在 viewpager 的中间) .我尝试将 FragmentStatePagerAdapter
与覆盖方法一起使用
getCount() {
返回 500000
和
getItem(整数位置){
返回 MyCustomFragment.newInstance(位置)
然后设置我的 viewpager.setCurrentItem(50000, false)
但是当我启动应用程序时它因 OutOfMemory 异常而崩溃。但是如果我删除 viewpager.setCurrentItem(50000, false)
然后一切正常,但用户从第一页开始,而不是 50000。据我所知,OutOfMemory 被抛出是因为当我将当前项目设置为 50000 fragmentadapter尝试加载从 1 到 50000 的每个 fragment 并将它们保存在内存中。那么我怎样才能避免这样的问题呢?可能我应该找到另一个解决方案,但我不知道如何用其他方式解决我的问题
UPD:这是不起作用的代码:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_one_day_schedule);
mViewPager = (ViewPager) findViewById(R.id.day_page);
mViewPager.setAdapter(new SchedulePagerAdapter(getSupportFragmentManager()));
// Puts user in the middle of viewpager
mViewPager.setCurrentItem(Integer.MAX_VALUE/2, false);
}
public static class SchedulePagerAdapter extends FragmentStatePagerAdapter {
public SchedulePagerAdapter(FragmentManager fm) {
super(fm);
}
// This doesnt work even with empty fragment
@Override
public Fragment getItem(int position) {
return new Fragment()
}
@Override
public int getCount() {
// Makes viewpager almost infinite
return Integer.MAX_VALUE;
}
}
最佳答案
尝试覆盖这些方法:
@Override
public int getCount() {
return Integer.MAX_VALUE;
}
@Override
public CharSequence getPageTitle(int position) {
String title = mTitleList.get(position % mActualTitleListSize);
return title;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
int virtualPosition = position % mActualTitleListSize;
return super.instantiateItem(container, virtualPosition);
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
int virtualPosition = position % mActualTitleListSize;
super.destroyItem(container, virtualPosition, object);
}
关于java - 无尽的 ViewPager(不循环),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40748414/