Как стать автором
Обновить

Комментарии 8

Такую классную статью бы на хабр =(
Что будет с колбэками, состоянием навигации и произвольными объектами после пересоздания активности?
Мое самое первое приложение под Android имело такую архитектуру (года 3 назад). Сейчас я использую практически для каждого фрагмента свой контейнер (Activity), но подумываю о переходе обратно.
Расскажите, почему перешли на схему 1A-1F, а теперь обратно подумываете.
Использую в проектах MVP. Иногда удобно, когда есть один общий презентер (у активити) на несколько фрагментов.
Ну и с onActivityResult во фрагментах намучился в свое время :)

Я пишу одно приложение, до этого опыт был стремящийся к 0. Как же я настрадался с этими фрагментами!
Приложение имеет навигационную панель (Drawer), соответственно, список корневых фрагментов. Так же требуется поддержка смартфонов\планшетов, некое подобие Master\Detail. В итоге получается, что корневой фрагмент должен содержать еще 1-2 фрагмента (Master или Master и Detail). Вложенные фрагменты — боль вдвойне, потому что у каждого childFragmentManager свой backstack.


И когда у меня был смартфон, окно Master, хотел показать Detail, я через интерфейс вызывал у MainActivity специальный метод, который заменял текущий корневой фрагмент на фрагмент Detail. Были проблемы с навигацией: куда возвращаться из фрагмента, как реализовывать стрелку "назад" (которая на самом деле "вверх") в ActionBar (каждый раз приходилось вручную включать либо меню, либо стрелку, при этом не забыть в onResume каждого фрагмент все настроить).


Вот изображение из моего вопроса на SO


Картинка

image


В итоге я пришел к следующей схеме:
На планшетах оба фрагмента, и master, и detail, располагаются в корневом фрагменте, на смартфонах для detail я открываю новую активити с detail фрагментом.
Плюсы:


  • автоматическая навигация по стрелке назад — задаю Parent Activity и все работает
  • Нет проблем с backstack вложенных фрагментов
  • бонус — анимация открытия активити

Недостатки:


  • Взаимодействие между фрагментами все-таки хитрозадое: в "родительском" фрагменте реализую интерфейс для взаимодействия.
  • В активити параметры бандлом передавать неудобно

Если кто-нибудь подскажет, как все это делается правильно, буду благодарен

Шикарно, одна аутсорсинговая компания переводит и публикует статью другой аутсорсинговой компании,
Оригинал
А как с случае множественных и вложенных фрагментов легко учитывать, что при восстановлении из backstack'a, view фрагмента пересоздаётся(если до этого добавили через replace)? Таким образом всякие позиции списков, динамически установленный текст в textview будет сброшен.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий