我想了解更多有关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的行为吗?谢谢.
谷歌指南说:
FragmentPagerAdapter
此版本的寻呼机最适合在有少量通常更多静态片段进行分页时使用,例如一组选项卡.用户访问的每个页面的片段将保留在内存中,但其视图层次结构可能在不可见时被销毁.这可能导致使用大量内存,因为片段实例可以保持任意数量的状态.对于较大的页面集,请考虑FragmentStatePagerAdapter.
关于FragmentStatePagerAdapter:
当存在大量页面时,此版本的寻呼机更有用,更像列表视图.当页面对用户不可见时,它们的整个片段可能被破坏,只保留该片段的保存状态.与FragmentPagerAdapter相比,这允许寻呼机保持与每个被访问页面相关联的更少的存储器,代价是在页面之间切换时可能具有更多的开销.
结论:FragmentStatePageAdapter
在您的情况下使用,就是您不希望Fragment
附加到您ViewPager
的被销毁.
您还可以使用viewpager.setOffscreenPageLimit(
限制在空闲状态下屏幕外保留的页数.