#android #android-fragments
#Android #android-фрагменты
Вопрос:
Как я могу извлечь фрагмент из backstack, не возобновляя его? Я просто хочу удалить его из заднего стека, я не хочу его отображать.
Комментарии:
1. Вы нашли решение? Я заметил, что мое приложение вылетает примерно из 140 фрагментов в backstack, поэтому я хочу начать удалять самые старые фрагменты примерно из 100 фрагментов, но пока не нашел способ это сделать.
Ответ №1:
Это архитектурный вопрос.
1) Предположим, у нас есть 2 контроллера (фрагменты / действия): контроллер A и контроллер B. Оба они подключены к одному экземпляру некоторой модели (вы можете использовать привязку к сервису, одноэлементному шаблону или модели инициализации в классе-наследнике приложения и создать для него геттер). Когда в контроллере B происходит что-то интересное, он уведомляет об этом модель, а затем модель вызывает ControllerA.finish() / ControllerA.remove() . Конечно, я всегда стараюсь реализовать это решение как можно лучше, но есть основная идея.
2) В других случаях я вызываю finish() сразу после startActivity(намерение);
3) Также я могу написать: startActivityForResult(намерение, requestCode) и после завершения второго действия вызывается метод onActivityResult(requestCode, responseCode, intent) — если значения requestCode равны, я завершаю действие.
Комментарии:
1. У фрагмента нет метода завершения.
2. Можете ли вы вставить простую проверку прямо в onResume () или в OnStart() — если есть необходимость удалить?
Ответ №2:
Если вы не используете метод FragmentTransaction public abstract FragmentTransaction addToBackStack (String name)
чтобы добавить его в задний стек. Удалять его не нужно.
Комментарии:
1. Мне нужно удалить определенный фрагмент из заднего стека. popBackStack не работает, поскольку он возобновляет указанный фрагмент.
2. Какие флаги используются в popBackStack. попробуйте использовать POP_BACK_STACK_INCLUSIVE.
3. Да, я использовал этот флаг. По-прежнему вызывается onResume записи backstack.