Изменение начального пункта назначения не отменяет предыдущий начальный пункт назначения в навигационном контроллере Android Навигация - PullRequest
0 голосов
/ 17 февраля 2020

Я пытаюсь изменить начальный пункт назначения в моем графике программно. Когда для моего флага установлено значение true, начальный пункт назначения (R.id.mainMenuFragment) назначается в onCreate правильно и отображается должным образом, но в се c (кажется после onCreate) запускается другой начальный пункт назначения (R.id.laneBootFragmen) из графика, так что кажется, 2 назначения (или 2 графика ??) применяются.

здесь настройка.

График R.navigation.app_navigation:

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

    <fragment
        android:id="@+id/bootFragment"
        android:name="com.test.ui.view.BootFragment"
        android:label="MainMenuFragment" />

    <fragment
        android:id="@+id/mainMenuFragment"
        android:name="com.test.ui.mainmenu.view.MainMenuFragment"
        android:label="MainMenuFragment" />

MainActivity xml:

 <fragment
            android:id="@+id/nav_host_fragment"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:defaultNavHost="true"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

Код, в котором я устанавливаю пункт назначения программно:

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        binding.includeDevicePasswordPrompt.viewModel = mViewModel

        checkIfAppIsRestartedAfterCrash()
    }

    private fun checkIfAppIsRestartedAfterCrash() {
        val controller =
            findNavController(R.id.nav_host_fragment)
        controller.navInflater
            .inflate(R.navigation.app_navigation).let {
                if (intent.extras?.getBoolean(APP_RESTARTED_AFTER_CRASH) == true) {
                    it.startDestination = R.id.mainMenuFragment
                } else {
                    it.startDestination = R.id.bootFragment
                }
                controller.graph = it
            }
        intent.removeExtra(APP_RESTARTED_AFTER_CRASH)
    }

Цель состоит в том, чтобы назначить startDestination, как ожидается, программно

...