2014-01-16 3 views
1

В настоящее время я использую ViewPager с шириной страницы 0.2 для одновременного отображения 5 представлений. Для этого логически требуется offscreen-limit из 7, чтобы иметь плавный переход между представлениями.ViewPager для одновременного отображения 5 просмотров в Android?

В начале я использовал FragmentStatePagerAdapter, но я беспокоился о потреблении памяти и производительности. Именно по этой причине я теперь использую PagerAdapter для отображения своих просмотров.

То, что я хочу (и что у меня есть):

< < - Вид | Просмотреть Просмотреть Просмотреть Просмотреть Просмотреть | View - >>

Есть ли какой-либо другой подход в android для обработки этого? Я думал об использовании LinearLayout с ScrollView, но мне нужно «придерживаться» представлений после прокрутки. И мне очень нравятся индикаторы пользовательской страницы.

Кроме того: Должен ли я сохранять виды (элементов) в своих объектах или воссоздавать их после каждого вызова (и да, я удаляю их в destroyItem)?

Другой вопрос: Было ли правильным решением перейти от FragmentStatePageAdapter к PagerAdapter?

ответ

1

Из документа, http://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html

Реализация PagerAdapter, которая использует фрагмент для управления каждой страницы. Этот класс также поддерживает сохранение и восстановление состояния фрагмента.

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

Таким образом, если у вас есть много страниц, используйте FragementStatePageAdapter. FragementStatePageAdapter более эффективен в управлении памятью.

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

1

После снятия вида из контейнера в destroyItem() держите их в ArrayList. Во время instantiateItem() сначала проверьте, есть ли у вас неиспользуемые виды в вашем архаристе, если да, используйте этот. Если нет, раздуйте один.

Сборщик мусора может иметь или не иметь сборку, поэтому вам необходимо сделать предварительную проверку, прежде чем вы сможете ее использовать.

Смежные вопросы