Заставить onDestroyView на виде фрагмента
Я пишу приложение, которое загружает профили пользователей и оценки пользователей для разных мест. Приложение использует фрагменты повсеместно, и сравнительно легко перейти из профиля в рейтинговое место.
Когда пользователь нажимает на профиль и попадает в оцененное место, он может щелкнуть другой профиль в оцененном месте и продолжать и продолжать.
Проблема, с которой я сталкиваюсь, связана с памятью, когда я смотрю на место в рейтинге и нажимаю на профиль, я переключаюсь с одного занятия на другое. В обоих этих действиях после setContentView я динамически загружаю фрагмент в пространство макета.
Теперь, когда я переключаюсь между этими действиями, состояние onSaveInstance почти всегда вызывается, однако, поскольку фрагмент, отображающий то, что было на переднем плане перед переключением активности, onDestroyView не вызывается.
То, что я хотел бы, это когда onSaveInstanceState вызывается в этих динамических фрагментах, это заставляет также вызывать onDestroyView.
Кажется, единственный вызов onDestroyView - это когда я добавляю фрагмент в задний стек. Когда на первый план выходит другое действие, и этот фрагмент останавливается, я бы хотел, чтобы также был вызван DestroyView.
Текущий обходной путь, который я хочу реализовать, - это пустой фрагмент без представления, и каждый раз, когда я вызываю startActivity(Intent i), загружаю этот фиктивный фрагмент, чтобы уничтожить представления и начать следующее действие. Затем, когда я вернусь, вытащите его из заднего стека и восстановите фактический последний фрагмент.
Это, однако, кажется чрезмерным. Итак, для остановленного фрагмента в остановленном действии с новым действием перед ним, как я могу заставить его уничтожить его представление?
1 ответ
Во-первых, вы не должны принуждать или удовлетворять onDestroyView
исправить ваш код - это задача FragmentManager и жизненного цикла Android @ Приостановка и возобновление активности. Если вы хотите работать с существующим кодом, используйте другие методы переопределения onPause
() или же onStop
().
Без размещенного кода я предполагаю, что вы используете метод replace() для отображения одного фрагмента поверх другого. Это более или менее вынуждает вас управлять фрагментами самостоятельно, некоторые разработчики на самом деле преуспевают в этом с некоторой борьбой (посмотрите на другие вопросы SO). Так что мое предложение для вас:
- Поддерживайте свои собственные состояния и показывайте правильные фрагменты, основанные на состоянии.
- Используйте BackStack и позвольте управлению фрагментом управлять стеком / состояниями.