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

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

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

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

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

Solutions Collecting From Web of "Ограничение на страницу просмотра ViewPager"

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

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

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

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

Также обратите внимание, что «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.