В примере об использовании фрагментов в документах Android, когда приложение находится в режиме «двойного просмотра», фрагмент сведений воссоздается всякий раз, когда приложению требуется показать подробности для другого заголовка. FragmentTransaction.replace()
используется для замены каждого экземпляра старого фрагмента на новый.
Это рекомендуемая практика? Не расточительно ли создавать новый экземпляр пользовательского интерфейса, когда реальное намерение (без каламбура) - обновить то, что показывает пользовательский интерфейс, а не сам пользовательский интерфейс. Мне кажется, единственная причина для создания новых экземпляров состоит в том, если кто-то намеревается добавить их в backstack, чтобы пользователь мог повторить шаги. В противном случае безопасно / желательно обновить фрагмент напрямую?
В случае примера это будет означать метод, аналогичный DetailsFragment.setShownIndex()
. Это будет вызвано, передавая новый индекс заголовка вместо воссоздания DetailsFragment
.
Предположим, у нас есть версия примера, в которой одно действие управляет обоими фрагментами, но показывает только один, заменяя каждый фрагмент по мере необходимости. Хорошо ли, чтобы действие создавало экземпляр каждого фрагмента, сохраняло ссылки на каждый из них, а затем просто добавляло или удаляло эти два экземпляра из себя по мере необходимости?
Одним из возможных неприятных следствий этого будет то, что, когда фрагмент заголовков находится в состоянии resumed
(т.е. на «переднем плане»), выбор заголовка приведет к вызову DetailsFragment.setShownIndex()
в момент, когда детали фрагмент находится в stopped
состоянии.
Хорошая идея? Плохая идея?
Заранее спасибо.