2

Недавно я начал рефакторинг моего приложения для Android, заменив «все» действия фрагментами. В государстве это прямо сейчас, он ведет себя намного хуже, чем раньше ...Ручка onResume() не вызывается при воссоздании фрагмента из backstack

Мои проблемы в области «навигации вверх», поведения задних фонарей и общей «перекраски» фрагментов, когда они выведены на передний план.

Таким образом, я создал логическое сияние фрагментов в моем ui, и когда пользователь находится в главном меню, кнопка «вверх» не должна отображаться. Когда пользователь находится в любом из других фрагментов, кнопка вверх должна вернуть пользователя в главное меню.

Когда я приступил к реализации этого, я просто положил

activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); 

В методе onResume моего фрагмента. Это работает так, как ожидается, до тех пор, пока главное меню не будет перенесено из заднего стека (или домашней навигации). Тогда метод onResume() не вызывается.

Желая «перекрасить» фрагмент, когда пользователь был где-то еще в приложении, похоже на то, что хочет сделать большая часть разработчиков. Я прочитал некоторые решения для этого, которые в основном включают прослушивание backstack изменений, а затем вызов onResume() для фрагмента, который вот-вот вернется. Это решение кажется уродливым взломом, которого вы не должны иметь в реальном приложении. Итак, как это делают разработчики больших приложений? Какова наилучшая практика? Или я пропустил какой-то принцип, говорящий, как не закодировать себя в этом уголке вообще?

Я должен сказать, что я думаю, что страница Android DEV фрагментов практически валяется жизненного цикла:

«Управление жизненным циклом фрагмента много, как управление жизненным циклом деятельности»

" Возобновлено: фрагмент отображается в текущей работе. "

Эта информация означает, что onResume() следует вызывать, когда фрагмент переходит от невидимого к видимому.

Кроме того, мое решение по обеспечению навигации, очевидно, неверно, какие-либо советы о том, как получить правильное поведение?

Спасибо вам за помощь!

ответ

0

ОК, было очень неясно, в чем проблема, поэтому я попытаюсь сломать его.

Проблема

onResume Метод Начального экрана не вызывается.

В поисках жизненного цикла жизненного цикла и фрагмента жизненного цикла: Он выделяет «Фрагменты onResume() или onPause() будут вызываться только при вызове Activities onResume() или onPause()».

Go here: 2nd paragraph

Это должно дать вам большую идею, почему ваш метод onResume() в ISNT домашнего экрана вызывается.Я бы не реализовал это сам, но ради того, чтобы дать решение, я бы очистил backstack (ради памяти) и создавал новую активность HomeScreen, когда пользователь пытается попасть на главный экран/рабочий стол или мое собственное решение - переписать часть ваше приложение снова вам не нужно использовать фрагменты ради него.

Программирование практики

Будьте осторожны при использовании многих фрагментов с помощью фрагмента, если ваш высококвалифицированным и знающий андроид API не должен использоваться для показа Mutiple видом на одном экране. Примеры использования включают в себя более крупные экраны (таблицы, дополнительную информацию и т. Д.

Сообщается о многих проблемах с белым экраном при обстреле приложения с помощью фрагментов и появлении на заднем стеке, поэтому утомляйтесь.

 Смежные вопросы

  • Нет связанных вопросов^_^