java - 无尽的 ViewPager(不循环)

标签 java android android-fragments out-of-memory

我想创建 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/

相关文章:

android - MVVM从模型到存储库的返回值

android - 从unity上传图片到facebook

java - 如何通过抽屉导航(android的新支持库)切换 fragment ?

java - 在 Apache commons CLI 中有条件地需要一个选项

java - 如何正确地将 Firebase 的 MinSDKVersion 从 15 更改为 16

android - 在图像之间滑动android

Android: fragment 堆栈屏幕旋转/配置已更改

java - 如何在 Java 中将日期增加 6 个月

java - 是否可以不在 spring mvc 的 url 中包含 WEB-INF 中的文件夹

android - BottomNavigationView + 在导航到不同选项卡时保存 fragment 状态