Как использовать фрагменты Android?

Я смотрю на демонстрационный код, который показывает, как использовать адаптер фрагмента (в данном случае адаптер вкладки). Мне любопытно, что именно делает метод instantiate(). Я вижу, что он используется в следующем демонстрационном коде на этой странице:

http://developer.android.com/reference/android/support/v4/view/ViewPager.html

(см. метод getItem() в классе TabsAdapter)

Если я правильно читаю демо-код, каждый раз, когда пользователь нажимает на одну из вкладок, создается новый фрагмент? И таким образом фрагмент снова начинает весь жизненный цикл (onAttach()...onCreate()... и т.д.)? Это звучит ужасно неэффективно. Я бы подумал, что фрагмент, который будет представлять содержимое для каждой вкладки, должен быть создан только один раз (возможно, в методе addTab()), а затем сохранен в какой-то коллекции, откуда его можно будет получить при вызове getItem().

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


person Finer Recliner    schedule 04.02.2012    source источник


Ответы (2)


Мои деньги будут заключаться в том, что функция setCurrentItem() на самом деле не уничтожает существующий фрагмент, отображаемый на этой вкладке. В противном случае у адаптера нет особых причин иметь список доступных вкладок. Скорее всего, когда вы переключаетесь с одной вкладки на другую, setCurrentItem() просто отсоединяет пользовательский интерфейс от текущего активного фрагмента (или вызывает его метод onPause()), а затем повторно прикрепляет пользовательский интерфейс для вновь выбранного фрагмента (или вызывает его метод onResume()).

Но, если вы сомневаетесь, вы можете прочитать источник :)

Надеюсь, это поможет, Дэвид

person David C. Sainte-Claire    schedule 04.02.2012

Мне удалось найти объяснение моего вопроса здесь

person Finer Recliner    schedule 05.02.2012