Android Флаги намерения активности компонента навигации - PullRequest
2 голосов
/ 07 января 2020

Я создал действие навигации из фрагмента в действие, но у меня нет способа очистить задний стек. Когда я выполняю действие навигации от моего фрагмента к новому действию и нажимаю кнопку «Назад», я возвращаюсь к предыдущему действию и предыдущему фрагменту. У меня нет возможности установить флаги Intent, используя график навигации, чтобы очистить предыдущее действие из заднего стека. Флаги

<fragment
    android:id="@+id/loginFragment"
    android:name="com.myapp.auth.LoginFragment"
    android:label="login_fragment"
    tools:layout="@layout/login_fragment" >
    <action
        android:id="@+id/action_loginFragment_to_webActivity"
        app:destination="@id/webActivity"
        app:popUpTo="@id/loginFragment"
        app:popUpToInclusive="true" />
</fragment>
<activity
    android:id="@+id/webActivity"
    android:name="com.myapp.web.WebActivity"
    android:label="activity_web"
    tools:layout="@layout/activity_web" >
</activity>

PopTo и Inclusive не влияют на кнопку «Назад» при переходе от фрагмента к новому действию, даже если их можно установить в редактор графиков. Я могу с помощью кнопки «Назад» перейти к предыдущему действию, которое мне больше не нужно в стеке.

Перед переходом на график навигации я мог бы просто указать это поведение с помощью флагов Intent:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

Как мне добиться того же с помощью навигационного графика?

Ответы [ 2 ]

3 голосов
/ 18 января 2020

Мне пришлось взломать мой путь через ту же проблему. Чтобы решить эту проблему, первое, что вам нужно сделать, это создать действие для перехода к действию, как вы уже сделали.

Например:

<action
    android:id="@+id/action_frag_to_myActivity"
    app:destination="@id/myActivity"
    app:popUpTo="@id/myActivity" />

Теперь вы можете передавать аргументы в Activity как преднамеренные дополнения, так что вы можете воспользоваться этим, чтобы целевое Activity выполняло «грязную работу» и очистить задний стек для вас.

Скажем, что у вас есть этот тег Activity внутри навигационного графика:

<activity
    android:id="@+id/myActivity"
    android:name="com.dummy.MyActivity"
    android:label="activity_my" />

Вы можете добавить в него аргумент и добавить значение по умолчанию. Например:

 <activity
    android:id="@+id/myActivity"
    android:name="com.dummy.MyActivity"
    android:label="activity_my">

        <argument
            android:name="clearBackstack"
            app:argType="boolean"
            android:defaultValue="true" />

</activity>

Затем, когда вы вызовете findNavController().navigate(R.id.myActivity), он передаст дополнительное намерение с ключом "clearBackstack", которое вы можете прочитать внутри метода Activity onCreate(). Нечто подобное примеру ниже Деятельность. Вы также можете изменить значение после перехода к нему. Подробнее об этом можно прочитать здесь, в документации .

0 голосов
/ 07 января 2020

Если вы переходите от одного занятия к другому.

Вот так я и решил тот же вопрос. Надеюсь, это поможет.

firstIntent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
...