Как я могу извлечь фрагмент из backstack, не возобновляя его?

#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.