Недавно я начал рефакторинг моего приложения для Android, заменив «все» действия фрагментами. В государстве это прямо сейчас, он ведет себя намного хуже, чем раньше ...Ручка onResume() не вызывается при воссоздании фрагмента из backstack
Мои проблемы в области «навигации вверх», поведения задних фонарей и общей «перекраски» фрагментов, когда они выведены на передний план.
Таким образом, я создал логическое сияние фрагментов в моем ui, и когда пользователь находится в главном меню, кнопка «вверх» не должна отображаться. Когда пользователь находится в любом из других фрагментов, кнопка вверх должна вернуть пользователя в главное меню.
Когда я приступил к реализации этого, я просто положил
activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
В методе onResume моего фрагмента. Это работает так, как ожидается, до тех пор, пока главное меню не будет перенесено из заднего стека (или домашней навигации). Тогда метод onResume() не вызывается.
Желая «перекрасить» фрагмент, когда пользователь был где-то еще в приложении, похоже на то, что хочет сделать большая часть разработчиков. Я прочитал некоторые решения для этого, которые в основном включают прослушивание backstack изменений, а затем вызов onResume() для фрагмента, который вот-вот вернется. Это решение кажется уродливым взломом, которого вы не должны иметь в реальном приложении. Итак, как это делают разработчики больших приложений? Какова наилучшая практика? Или я пропустил какой-то принцип, говорящий, как не закодировать себя в этом уголке вообще?
Я должен сказать, что я думаю, что страница Android DEV фрагментов практически валяется жизненного цикла:
«Управление жизненным циклом фрагмента много, как управление жизненным циклом деятельности»
" Возобновлено: фрагмент отображается в текущей работе. "
Эта информация означает, что onResume() следует вызывать, когда фрагмент переходит от невидимого к видимому.
Кроме того, мое решение по обеспечению навигации, очевидно, неверно, какие-либо советы о том, как получить правильное поведение?
Спасибо вам за помощь!