【问题标题】:How to get dynamically set Nav Host using findNavController from <FrameLayout /> and not from <Fragment />?如何使用 <FrameLayout /> 而不是 <Fragment /> 的 findNavController 动态设置导航主机?
【发布时间】:2020-03-01 13:54:52
【问题描述】:

我已经在XML中定义了代码,用于FrameLayout中的导航主机,以便动态创建导航主机。

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

当尝试使用 MainActivity 中的findNavController 访问它时...

        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

【问题讨论】:

    标签: android navigation android-architecture-navigation android-jetpack-navigation


    【解决方案1】:
    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-27
      • 2017-08-07
      • 1970-01-01
      • 2022-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多