Комментарии 20
А вы про вложенные фрагменты не слышали? Делаете для каждого таба корневой фрагмент и все под экраны этого таба складируется как "подфрагменты" этого фрагмента, соответственно их бэкстек хранится во фрагмент менеджере коневого фрагмента и сохраняется вместе с состоянием корневого фрагмента. Надеюсь как сохранять состояние фрагментов при переключении табов вы в курсе. Собственно это вроде уже довольно стандартное решение вашей задачи.
Есть правда мнение что вложенные фрагменты это нереальное зло и приводит к невообразимому числу подводных камней, костылей и багов. Но лично у мня за два года их использования проблемы с ними возникали не часто и каких то критических или нерешаемых проблем не было. Хотя бывает что с ними приходится хорошенько подумать и покурить сорци андройда для лучшего понимания их жизненного цикла. Но в андройде так имхо почти везде...
Есть даже пяток:
https://play.google.com/store/apps/details?id=com.touchin.redmond
https://play.google.com/store/apps/details?id=com.riotrus.guilds
https://play.google.com/store/apps/details?id=com.nascar.nascarmobile
https://play.google.com/store/apps/details?id=com.vzw.indycar
https://play.google.com/store/apps/details?id=com.dfbpokal.mobile
В первых двух правда уже не очень помню на сколько повсеместно используются вложенные фрагменты, возможно всего на паре экранов, но вот на следующих двух вложенные фрагменты просто таки по всюду, и даже там где и не нужно.., но уж в таком виде нам оно нам досталось на допиливание.
Ну если вы про случай описанный в статье. То есть с переключением между несколькими бэк стеками, то боюсь такого кейса нет ни в одном из приложений. Ну а просто вложенные фрагменты внутри какого либо экрана который может попасть в бэк стек точно есть в 4м (com.vzw.indycar), какие то конкретные экраны правда боюсь назвать так сходу не смогу.
Надеюсь как сохранять состояние фрагментов при переключении табов вы в курсе.
Расскажите мне.
Допустим мы имеем 2 таба. Мы переключились из первого таба (в котором у нас RecyclerView в котором в свою очередь ViewPager) во второй. Как нам сохранить состояние первого фрагмента не держа его в памяти?
saveFragmentInstanceState не предлагать, — всё-равно не работает.
saveFragmentInstanceState вполне себе работает, пользовался им несколько раз, никаких багов не наблюдал, правда последний раз это было с год назад. Проблемы скорее могут возникнуть с сохранением состояния RecyclerView и особенно ViewPager, точнее с восстановлением этих состояний. На сколько помню у обоих этих контролов позиция нормально восстанавливается только если восстанавливать её не сразу в onCreate/onViewCreated или onViewStateRestored а с небольшой задержкой через метод post. А учитывая что ViewPager в ячейке RecyclerView, надо его состояние через адаптер прокидывать и уже там в bindViewHolder восстанавливать, опять же возможно с отложенным через post вызовом setCurrentItem. Но это всё к вложенным фрагментам отношения не имеет, без вложенностей и даже вообще без фрагментов придется городить всё те же костыли(
Можно ещё заюзать FragmentStatePagerAdapter для табов что бы самому не писать сохранение/восстановление состояний, но он работает через тот же saveFragmentInstanceState, так что это уже просто вопрос удобства.
и даже вообще без фрагментов придется городить всё те же костыли
А вообще без фрагментов это как?) При возврате по стеку activity уж точно восстанавливается предыдущее состояние в прежнем виде без всяких костылей.
This library we use in our app Hotellook.
А вы пробовали? Где там полное восстановление истории при переключении вкладки?
Нажал поиск, пролистал до конца списка, переключился в избранное, снова переключился в поиск — и мы в начале списка. Немного не так, как в Instagram.
Смотрим их же приложение на ios, и там всё ок…
Вложенные фрагменты, конечно зло, но порой без них никак… И это явно лучше чем использовать deprecated класс
На счет Single activity, как мне кажется тут думать надо, а не лепить слепо. И для каждого проекта, прорабатывать, продумавать ваш UX, лично для себя понял, что single activity, это решение для не больших app, если же app идет со сложным и загруженым UX, ни какого single activity, иначе протом проблем будет больше чем, пользы от этого решения. А если еще нужно разделеить экраны на темы, с разными цвтовыми гамами и шрифтами, то тогда точно ни какого single activity.
История в каждой вкладке или multiple backstack