当前位置:  开发笔记 > 编程语言 > 正文

ViewPager的行为,它不会破坏旧的片段

如何解决《ViewPager的行为,它不会破坏旧的片段》经验,为你挑选了1个好方法。

我想了解更多有关ViewPager行为的信息.我有一个FragmenPagerAdapter:

public class DatePagerAdapter extends FragmentPagerAdapter {

        public DatePagerAdapter(FragmentManager fm) {
            super(fm);
        }


        @Override
        public Fragment getItem(int position) {
            Calendar calendar = Calendar.getInstance();
            calendar.set(Calendar.DAY_OF_MONTH, 1);
            int offset = position - 100;
            calendar.add(Calendar.MONTH, offset);
//            Toast.makeText(TestActivity.this,(calendar.get(Calendar.MONTH)+1)
            Log.v("CALENDAR", "" + position);
            TestFragmentDate date = TestFragmentDate.newInstance(TestActivity.this, calendar);
            return date;
        }

        @Override
        public int getCount() {
            return 200;
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            return super.instantiateItem(container, position);
        }
    }

和我的活动中的代码:

adapter = new DatePagerAdapter(getSupportFragmentManager());
        MinFragmentPagerAdapter wrapperMin = new MinFragmentPagerAdapter(getSupportFragmentManager());
        wrapperMin.setAdapter(adapter);
        PagerAdapter wrapper = new InfinitePagerAdapter(wrapperMin);
        viewPager = (ViewPager) this.findViewById(R.id.pager);
        viewPager.setAdapter(adapter);
        viewPager.setCurrentItem(100);
        viewPager.addOnPageChangeListener(this);

根据我的大四学生,ViewPager总是绘制3个片段,并继续重复使用它们.例如,起初我在位置观看:99,100,101如果我向右滚动,它将摧毁99并创建102,依此类推.但是,当我调试该函数时getItem,首先它确实遇到了这个函数,但当我向右滚动5或6页,然后回滚时,它没有遇到getItem,应该被销毁的位置.

那么有人请为我解释一下ViewPager的行为吗?谢谢.



1> Vipul Asri..:

谷歌指南说:

FragmentPagerAdapter

此版本的寻呼机最适合在有少量通常更多静态片段进行分页时使用,例如一组选项卡.用户访问的每个页面的片段将保留在内存中,但其视图层次结构可能在不可见时被销毁.这可能导致使用大量内存,因为片段实例可以保持任意数量的状态.对于较大的页面集,请考虑FragmentStatePagerAdapter.

关于FragmentStatePagerAdapter:

当存在大量页面时,此版本的寻呼机更有用,更像列表视图.当页面对用户不可见时,它们的整个片段可能被破坏,只保留该片段的保存状态.与FragmentPagerAdapter相比,这允许寻呼机保持与每个被访问页面相关联的更少的存储器,代价是在页面之间切换时可能具有更多的开销.

结论:FragmentStatePageAdapter在您的情况下使用,就是您不希望Fragment附加到您ViewPager的被销毁.

您还可以使用viewpager.setOffscreenPageLimit();限制在空闲状态下屏幕外保留的页数.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有