Как получить динамически установленный Nav Host с помощью findNavController из а не из ? - PullRequest
0 голосов
/ 01 марта 2020

Я определил код в XML для хоста Nav в FrameLayout для динамического создания хоста Nav.

    <FrameLayout
            android:id="@+id/main_nav_host_fragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginBottom="?attr/actionBarSize" />

При попытке доступа к нему с помощью findNavController из MainActivity ...

        val navController = findNavController(R.id.main_nav_host_fragment)
        findViewById<BottomNavigationView>(R.id.bottom_navigation_view)
            .setupWithNavController(navController)
        navController.addOnDestinationChangedListener { _, destination, _ ->
            if(destination.id == R.id.signupFragment) {
                bottomNavigationView.visibility = View.GONE
            } else {
                bottomNavigationView.visibility = View.VISIBLE
            }
        }

Я получаю ошибку: Caused by: java.lang.IllegalStateException: Activity com.example.client.ui.main.MainActivity@516bd45 does not have a NavController set on 2131296657

1 Ответ

0 голосов
/ 01 марта 2020
val finalHost = NavHostFragment.create(R.navigation.example_graph)
supportFragmentManager.beginTransaction()
    .replace(R.id.nav_host, finalHost)
    .setPrimaryNavigationFragment(finalHost) // equivalent to app:defaultNavHost="true"
    .commit()

для получения более подробной информации получил https://developer.android.com/guide/navigation/navigation-programmatic

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...