Кнопки «Назад» и «Вверх» с различным поведением в компоненте навигации Jetpack

Я пытаюсь создать пункт назначения, который, когда я нажимаю назад / вверх, приложение закрывается. Поэтому я установил popUpTo в качестве начального пункта назначения и установил для popUpToInclusive значение true. Проблема в том, что когда я нажимаю кнопку «Назад», приложение закрывается по назначению, но если я нажимаю кнопку «Вверх» (стрелка назад на панели инструментов), действие воссоздается ...

навигационный график:

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main_graph"
    app:startDestination="@id/call">

    <fragment
        android:id="@+id/call"
        android:name="com.example.navigationplayground.main.CallFragment"
        android:label="Call"
        tools:layout="@layout/fragment_call" />
    <fragment
        android:id="@+id/agenda"
        android:name="com.example.navigationplayground.main.AgendaFragment"
        android:label="Agenda"
        tools:layout="@layout/fragment_agenda" >
        <action
            android:id="@+id/openDetail"
            app:destination="@id/detailFragment"
            app:popUpTo="@+id/call"
            app:popUpToInclusive="true" />
    </fragment>
    <fragment
        android:id="@+id/detailFragment"
        android:name="com.example.navigationplayground.main.DetailFragment"
        android:label="Detail"
        tools:layout="@layout/fragment_detail"/>

</navigation>

пример приложения: https://github.com/LipeDuoli/navPlayground

посмотрите, как работают кнопки «Назад» и «Вверх» на подробном экране


person Fillipe Duoli    schedule 30.10.2018    source источник
comment
Вы имеете в виду кнопку со стрелкой назад на панели инструментов?   -  person Alexey Denysenko    schedule 31.10.2018
comment
да .. кнопка "Назад" на системе работает как положено. кнопка "Вверх" (стрелка назад на панели инструментов) воссоздает действие   -  person Fillipe Duoli    schedule 31.10.2018


Ответы (1)


Проблема в том, что up и back ведут себя по-разному.

Кнопка "Вверх" никогда не закрывает приложение

Если пользователь находится в начальной точке назначения, кнопка «Вверх» отображаться не будет. Когда ваше приложение запускается с использованием глубинной ссылки на задачу другого приложения, Up должен направлять пользователей в иерархическое родительское место назначения, а не обратно в другое приложение.

Если вы не хотите следовать рекомендациям, один из возможных способов решения вашей ситуации - изменить эту строку

val appBarConfiguration = AppBarConfiguration(setOf(R.id.call, R.id.agenda))

К этому

val appBarConfiguration = AppBarConfiguration(setOf(R.id.call, R.id.agenda, R.id.detailFragment))

Это в основном означает, что ваш start пункт назначения может быть одним из списка выше. И start означает, что пользователь выйдет из приложения после повторного нажатия на этот экран.

Подробнее:

person Alexey Denysenko    schedule 31.10.2018
comment
Кнопка "Вверх" никогда не закрывает ваше приложение, поэтому мой подход неверен ... но немного странно, что кнопка "Вверх" перезагружает действие .. спасибо, человек - person Fillipe Duoli; 02.11.2018