Ограничение на страницу просмотра ViewPager

Есть ли способ обойти нормальное поведение ViewPager и его ViewPager границы страницы ? My ViewPager содержит четыре fragments , каждый из которых содержит gridview изображений. Проблема заключается в том, что при инициализации ViewPager ViewPager два fragments , что приводит к тому, что примерно 20 изображений (около 10 на фрагмент) загружаются / извлекаются из улова одновременно. Можно ли отключить ограничение экрана на странице?

Моя цель – загружать изображения только при выборе fragment или только когда пользователь наводил изображение. Один из способов добиться этого – использовать прослушиватель onPageSelected и установить флаг, который сообщает GridViewAdapter если разрешено загружать изображение или нет.

Второй способ, который я могу придумать, – установить HoverListener в ImageView и загружать только изображение onHover , но этот прослушиватель доступен только в 4.0 и более поздних версиях.

Есть ли лучший способ достичь этого?

Можно ли отключить ограничение экрана на странице?

Нет. Он уже настроен на минимально возможное значение: по одной странице на каждой стороне просматриваемой страницы. Это необходимо для того, чтобы анимационные эффекты работали – вы одновременно видите части из двух фрагментов (оригинальные и новые).

Моя цель – загружать изображения только при выборе фрагмента или только когда пользователь наводил изображение.

Затем загрузите сетку с изображениями-заполнителями и не загружайте реальные изображения до тех пор, пока страница не будет изменена.

Также обратите внимание, что «hover» подразумевает какую-то мышь или аналогичный указатель, который не используется на большинстве Android-устройств.

Просто установите для параметра offscreen limit значение один.

 ViewPager mViewpager = (ViewPager)findView.... mViewPager.setOffscreenPageLimit(1); 

Handle viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener()

В нем удалите дополнительные представления после position + 1 и до position - 1 используя viewPager.removeViewAt(int) (т. viewPager.removeViewAt(int) Ограничивать пейджер только 3 страницами: текущим, предыдущим и последующим.

Затем вы должны обработать destroyItem в адаптере viewpager, recycle() в растровых изображениях в разрушенном виде.

 @Override public void destroyItem(ViewGroup container, int position, Object object) { LinearLayout layout = (LinearLayout) object; ((ViewPager) container).removeView(layout); ImageView imgDisplay = (ImageView) layout.findViewById(R.id.quranPage); Drawable drawable = imgDisplay.getDrawable(); if (drawable instanceof BitmapDrawable) { BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable; Bitmap bitmap = bitmapDrawable.getBitmap(); if (bitmap != null) //when reading page fails, this will be null bitmap.recycle(); } } 

Вы также можете сделать это в xml с помощью привязки данных Android:

 <android.support.v4.view.ViewPager [...] app:offscreenPageLimit="@{1}" [...] </android.support.v4.view.ViewPager> 

Моя цель – загрузить изображения только при выборе фрагмента

Вы можете использовать setUserVisibleHint(boolean isVisibleToUser) фрагмента в вашем ViewPager.

mViewPager.setOffscreenPageLimit(1); Не даст то, что вы хотите, он будет загружать соседний фрагмент, если уже не загружается (это означает, что он будет загружать 2 фрагмента).

Скажем, если вы хотите сразу загрузить весь фрагмент (4 фрагмента), используйте только setOffscreenPageLimit(3) , иначе избегайте использования setOffscreenPageLimit .

Я думаю, что вы не можете изменить поведение по умолчанию для загрузчика соседнего фрагмента для viewpager.