Построить фрагмент backStack для push-уведомления

Я использую FCM, чтобы показать фрагмент, когда пользователь нажимает на уведомление в строке состояния.

Текущий поток приложения — это MainActivity (фрагмент A -> фрагмент B -> фрагмент C).

Однако, когда пользователь нажимает на уведомление (независимо от того, запущено приложение или нет), я хочу показать фрагмент C, сохраняя при этом правильную обратную навигацию, поэтому при нажатии клавиши «Назад» пользователь переходит к фрагменту B и фрагменту A при повторном нажатии.

Я знаю, что у действий есть TaskStackBuilder для этой цели, но я не смог найти ничего для создания backStack для фрагментов, прежде чем показывать свое уведомление.

Любая идея, как я мог бы построить стек? Я попытался добавить все фрагменты в транзакцию, а затем зафиксировать перед добавлением фрагмента C, но я получаю IllegalStateException: commit already called во время второй фиксации


person saintjab    schedule 03.09.2019    source источник


Ответы (1)


Ручная обработка стека фрагментов сложна. Я бы порекомендовал вам проверить компонент навигации. Это позволит создавать явные глубокие ссылки с правильной обработкой обратного стека (класс NavDeepLinkBuilder).

Покажи свой код. Возможно, вам придется создавать новую транзакцию для каждого фрагмента и операции фиксации. Используйте этот метод, чтобы добавить A, B и C:

    public void addFragmentOnTop(Fragment fragment) {
        getSupportFragmentManager()
            .beginTransaction()
            .replace(R.id.container, fragment)
            .addToBackStack(null)
            .commit();
    }
person 3mpty    schedule 03.09.2019