Как заставить мой ViewPager загружать только одну страницу за раз, т.е. setOffscreenPageLimit (0);

Я понимаю, что самое низкое число, которое я могу предоставить setOffscreenPageLimit(int) равно 1. но мне нужно загружать одну страницу за раз, потому что проблемы с памятью.

Должен ли я использовать старый стиль tabhost и т. Д.? Или есть способ / взломать я могу заставить мой viewPager загружать одну страницу за раз?

Мой адаптер расширяет BaseAdapter с помощью паттерна ViewHolder.

Solutions Collecting From Web of "Как заставить мой ViewPager загружать только одну страницу за раз, т.е. setOffscreenPageLimit (0);"

Насколько я знаю, это невозможно при использовании ViewPager . По крайней мере, нет, когда вы хотите, чтобы ваши страницы были удачными.

Поэтому объяснение очень просто:

Когда вы прокручиваете между двумя страницами, есть точка, когда обе страницы должны быть видны, так как вы не можете прокручивать между двумя вещами, когда один из них даже не существует в этой точке.

См. Этот вопрос для большего: ViewPager.setOffscreenPageLimit (0) не работает должным образом

CommonsWare предоставила хорошее объяснение в комментариях к его ответу .

Но мне нужно загрузить одну страницу за раз, потому что проблемы с памятью.

Это предполагает, что вы получаете OutOfMemoryError s.

Должен ли я использовать старый стиль tabhost и т. Д.?

Да, или FragmentTabHost , или вкладки панели действий.

Или есть способ / взломать я могу заставить мой viewPager загружать одну страницу за раз?

Нет, по той простой причине, что ViewPager требует более одной страницы за раз скользящую анимацию. Вы можете увидеть это, используя ViewPager и ViewPager .

Или вы можете работать над исправлением проблем, связанных с памятью. Предполагая, что это приложение является тем же, о котором вы сообщали ранее , вы используете только 7 Мбайт кучи пространства. Это приведет только к OutOfMemoryError s, если ваша оставшаяся куча сильно фрагментирована. Существуют стратегии управления памятью (например, inBitmap в BitmapOptions для создания растровых изображений из внешних источников), которые помогают решать такие проблемы фрагментации.

Мой адаптер расширяет BaseAdapter с помощью паттерна ViewHolder.

BaseAdapter предназначен для использования с AdapterView , а не ViewPager .

У меня была такая же проблема, и я нашел решение для нее:

шаги:

1) Сначала загрузите класс CustomViewPager из этой ссылки.

2) Используйте этот класс следующим образом:

В Java:

 CustomViewPager mViewPager; mViewPager = (CustomViewPager) findViewById(R.id.swipePager); mViewPager.setOffscreenPageLimit(0); 

В XML:

 <com.pathofyourclass.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, который загружает только одну страницу за раз.

 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); } } 

Я знаю, что это старый пост, но я наткнулся на эту проблему и нашел хорошее исправление, если вы загружаете фрагменты. Просто проверьте, видит ли пользователь фрагмент или нет, переопределяя setUserVisibleHint (). После этого загрузите данные.

  @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser) { getData(1, getBaseUrl(), getLink()); } }