如何使我的ViewPager一次只加载一个页面,即setOffscreenPageLimit(0);
我明白我可以给setOffscreenPageLimit(int)
的最低数量是1,但我需要一次加载一个页面,因为内存的问题。
我将不得不使用旧式的tabhost等? 或者有没有办法/黑客我可以让我的viewPager一次加载一个页面?
我的适配器使用ViewHolder模板扩展了BaseAdapter。
据我所知,这是不可能的,当使用ViewPager 。 至less不是,当你想你的网页可以刷卡。
因此,解释非常简单:
当你在两个页面之间滑动时,当两个页面都需要可见时,会有一个Point,因为当两个页面中的一个不存在时, 你不能在两个页面之间滑动 。
看到这个问题更多: ViewPager.setOffscreenPageLimit(0)不能按预期的方式工作
CommonsWare在他的回答中提供了一个很好的解释。
但我需要一次加载一个页面,因为内存问题。
这假定你正在OutOfMemoryError
s。
我将不得不使用旧式的tabhost等?
是,或FragmentTabHost
,或操作栏选项卡。
或者有没有办法/黑客我可以让我的viewPager一次加载一个页面?
不,因为ViewPager
需要多个页面才能进行滑动animation。 你可以通过使用ViewPager
和滑动来看到这一点。
或者,你可以努力解决你感觉到的记忆问题。 假设这个应用程序和今天早些时候报告的应用程序是一样的,那么你只能使用7MB的堆空间。 这只会导致OutOfMemoryError
如果你的剩余堆是高度分散的。 有内存pipe理的策略(例如, inBitmap
中的BitmapOptions
用于创build来自外部源的位图),这有助于解决这种碎片问题。
我的适配器使用ViewHolder模板扩展了BaseAdapter。
BaseAdapter
用于AdapterView
,而不是ViewPager
。
我有同样的问题,我find了解决scheme:
脚步:
1)首先从这个链接下载CustomViewPager类。
2)使用这样的类:
在Java中:
CustomViewPager mViewPager; mViewPager = (CustomViewPager) findViewById(R.id.swipePager); mViewPager.setOffscreenPageLimit(0);
在XML中:
<com.yourpackagename.CustomViewPager xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/swipePager" android:layout_width="match_parent" android:layout_height="match_parent"/>
现在只能一次加载一个页面。
谢谢。
你可以使用FragmentStatePagerAdapter 。 这使得寻呼机能够保持更less的内存。 它完全从FragmentManager中删除Fragment实例,一旦他们不可及。 已删除片段的状态存储在FragmentStatePagerAdapter中。 一旦你返回到一个现有的项目和状态恢复,碎片实例被重新创build。
public static class MyAdapter extends FragmentStatePagerAdapter { public MyAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { return NUM_ITEMS; } @Override public Fragment getItem(int position) { return ArrayListFragment.newInstance(position); } }
我知道这是一个旧的post,但我偶然发现这个问题,发现一个很好的解决scheme,如果你的加载片段。 简单地说,通过覆盖setUserVisibleHint()来检查用户是否看到片段。 之后加载数据。
@Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser) { getData(1, getBaseUrl(), getLink()); } }