Я конвертирую приложение для использования фрагментов, используя библиотеку совместимости. В настоящее время у меня есть ряд действий (ABCD), которые связаны друг с другом, D имеет кнопку «ОК», которая при нажатии завершает вызовы, которые затем всплывают, onActivityResult()
чтобы дополнительно уничтожить C и B.
Для моей предварительной версии фрагмента Honycomb каждое действие фактически является оберткой для фрагментов Af Bf Cf Df. Все действия запускаются через startActivityForResult()
и onActivityResult()
внутри каждого фрагмента можно с удовольствием позвонитьgetActivity().finish()
Проблема, с которой я столкнулся, заключается в том, что в моей версии сота у меня есть только одно действие, A, и фрагменты Bf, Cf, Df загружаются с помощью FragmentManager
.
Что я не понимаю, что делать в Df, когда нажимается «OK» для удаления фрагментов Df, Cf и Bf?
Я попытался получить фрагмент, выталкивающий себя из стека, но это привело к исключению. onActivityResult()
бесполезно, потому что я не загрузил фрагмент, используя startActivityForResult()
.
Я думаю об этом совершенно неправильно? Должен ли я реализовать какой-то тип слушателя, который связывается с родительским фрагментом или действием, чтобы выполнить всплывающее окно с помощью менеджера транзакций?
Ответы:
Шаг № 1: Пусть Df скажет D: «Эй! Мы получили ОК!» посредством вызова метода, либо в самой активности, либо в экземпляре интерфейса, предоставленного действием.
Шаг № 2: Пусть D удалит фрагменты через
FragmentManager
.Хостинговая активность (D) - это та, которая знает, какие другие фрагменты есть в активности (по сравнению с другими действиями). Следовательно, внутрифрагментные события, которые могут повлиять на фрагментную смесь, должны быть распространены на действие, которое сделает соответствующие движения оркестровки.
источник
finish()
должно хватить.onDestroy()
метод к вашему фрагменту и посмотрите, будет ли он вызван.Хотя это может быть не самым лучшим подходом, самый близкий аналог, который я могу себе представить, это работает с библиотекой поддержки / совместимости.
или
в противном случае.
Кроме того, вы можете использовать backstack и вытолкнуть его. Однако имейте в виду, что фрагмент может не находиться в обратном стеке (в зависимости от транзакции фрагмента, который его туда доставил ...) или он может оказаться не последним, попавшим в стек, поэтому извлечение стека может удалить неправильный ...
источник
Вы можете использовать подход ниже, он отлично работает:
источник
popBackStack()
это единственное решение, которое работает, когда вы хотите вернуть заголовок панели действий к предыдущему состоянию после удаления фрагмента. В противном случае мне не нужно было бы объединять оба решения с высокой оценкой от stackoverflow.com/questions/13472258/… и это решение здесь, чтобы всегда устанавливать правильный заголовок панели действий после различных вариантов использования. как нажатие назад, удаление, добавление замены и так далее.Вы должны позволить Activity заниматься добавлением и удалением фрагментов, как говорит CommonsWare, использовать слушателя. Вот пример:
источник
В Activity / AppCompatActivity:
а затем позвоните во фрагмент:
или как указано в других ответах, назовите это во фрагменте:
источник
Если вы используете новый компонент навигации, просто
Он выполнит всю транзакцию FragmentTransaction за вами.
источник
Посмотрите, удовлетворяет ли ваш запрос DialogFragment. DialogFragment имеет метод dismiss (). Намного чище на мой взгляд.
источник
Я создаю простой метод для этого
Чем поместить его в мой класс ActivityUtils
Это отлично работает, получайте удовольствие!
источник
OnCreate:
Вот как я скрываю фрагмент в событии клика 1
Затем показывает его обратно в событии 2
источник
Если вам нужно вернуться с четвертого фрагмента в истории backstack к первому, используйте теги !!!
Когда вы добавляете первый фрагмент, вы должны использовать что-то вроде этого:
или
И когда вы хотите показать фрагменты B, C и D, вы используете это:
и другие письма ....
Чтобы вернуться к
Fragment
A, просто вызовитеpopBackStack(0, "A")
yes, используйте флаг, который вы указали при добавлении, и обратите внимание, что в команде должен быть тот же флагaddToBackStack()
, а не тот, который используется в команде replace или add.Пожалуйста ;)
источник
Закрыть фрагмент внутри того же фрагмента
источник
Почему бы просто:
getActivity () отделка ().
источник