Intereting Posts

Запретить ViewPager уничтожать заставку

У меня есть ViewPager, подключенный к FragmentPagerAdapter, который отображает три фрагмента. Кажется, что ViewPager уничтожает представление размещенного фрагмента, когда он больше, чем один удаленный от текущей позиции.

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

Он также не загружает третий фрагмент до тех пор, пока не произойдет первый прорыв, что является проблематичным, поскольку каждый фрагмент обрабатывает свои собственные служебные вызовы, и я предпочел бы, чтобы все три огня были отключены одновременно с загрузкой активности. Удержание третьего служебного вызова меньше идеального.

Есть ли способ убедить ViewPager остановить это поведение и просто сохранить все мои фрагменты в памяти?

Solutions Collecting From Web of "Запретить ViewPager уничтожать заставку"

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

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

mViewPager = (ViewPager)findViewById(R.id.pager); mViewPager.setOffscreenPageLimit(2); 

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

http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int)

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

1. В onCreate () ваших фрагментов вызовите setRetainInstance (true).

2. Если количество фрагментов фиксировано и относительно мало, то в вашем onCreate () добавьте следующий код:

 ViewPager mViewPager = (ViewPager) findViewById(R.id.pager); mViewPager.setOffscreenPageLimit(3); 

Если я правильно помню, второй вариант более перспективен. Но я призываю вас попробовать оба и посмотреть, какие из них работают.