Android NavigationUI - обрабатывать обратное нажатие при появлении начального фрагмента - PullRequest
0 голосов
/ 13 декабря 2018

Я использую NavigationUI компонентов архитектуры Android с нижней навигацией в моем приложении для Android.У меня следующая ситуация

  1. Приложение запускается с фрагмента A
  2. Первоначальный расчет завершен, и теперь я выскакиваю фрагмент A поnavController.popBackStack()
  3. Приложение переходит во фрагмент B (Это служит «домом» для приложения)
  4. Теперь есть еще фрагменты, скажем C и D
  5. Пользователь может перемещаться между B , C и D

Теперь проблема в моем навигационном графике, мой начальный фрагмент был A (путем определения app:startDestination="@id/fragmentA"), но теперь это выпало из активности.Из-за этого, в любое время, если я нажимаю, приложение просто закрывается, вместо этого возвращаясь к предыдущему фрагменту.Например, допустим, я перешел к фрагменту C или D из фрагмента B , и если я нажму кнопку "Назад", мое приложение закроется вместо перехода к фрагменту B .Если есть способ «переназначить» startDestination?

, я проверил ответ на этот вопрос, который имеет ситуацию, аналогичную описанной выше, но использование NavOptions почему-то не работает.Есть ли другой путь?Ниже приведен код, который я использовал для вставки фрагмента и добавления опций навигации

 navController.popBackStack()     
 val navOptions: NavOptions = NavOptions.Builder()
            .setPopUpTo(R.id.homeFragment, true)
            .build()

 navController.navigate(R.id.action_fragmentA_to_fragmentB, null, navOptions)

1 Ответ

0 голосов
/ 10 июля 2019

Используйте этот график навигации.Надеюсь, это решит вашу проблему.

<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/nav_graph"
    app:startDestination="@id/fragment_a">

    <fragment
        android:id="@+id/fragment_a"
        tools:layout="@layout/fragment_a">

        <action
            android:id="@+id/action_a_to_b"
            app:destination="@id/fragment_b"
            app:popUpTo="@id/fragment_a"
            app:popUpToInclusive="true"/>
    </fragment>

    <fragment
        android:id="@+id/fragment_b"
        tools:layout="@layout/fragment_b">

        <action
            android:id="@+id/action_b_to_c"
            app:destination="@id/fragment_c"/>
    </fragment>

    <fragment
        android:id="@+id/fragment_c"
        tools:layout="@layout/fragment_c">
    </fragment>

</navigation>

Используйте следующую строку для навигации:

navController.navigate(R.id.action_a_to_b)
navController.navigate(R.id.action_b_to_c)
...