我正在使用带有底部导航的 Android 导航组件,lint 会发出有关替换 <fragment>
的警告带有 <FragmentContainerView>
的标签但是当我更换时,findNavController
不工作它给了我关于它没有设置 NavController 的错误
分段
<androidx.fragment.app.FragmentContainerView
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:navGraph="@navigation/mobile_navigation" />
Activity val navController = findNavController(R.id.nav_host_fragment)
val appBarConfiguration = AppBarConfiguration(
setOf(
R.id.navigation_classes, R.id.navigation_schedule, R.id.navigation_settings
)
)
setupActionBarWithNavController(navController, appBarConfiguration)
navView.setupWithNavController(navController)
}
最佳答案
根据 this issue , 当使用 FragmentContainerView
,你需要找到NavController
使用 findFragmentById()
而不是使用findNavController()
当在 onCreate()
:
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
这是因为 findNavController(R.id.nav_host_fragment)
依赖于已经创建的 fragment View ,而使用 FragmentContainerView
时并非如此(因为它在引擎盖下使用 FragmentTransaction
来添加 NavHostFragment
)。如果您使用 Fragment 1.4.0或更高,View Binding ,您可以使用
getFragment()
方法:val navController = binding.container.getFragment<NavHostFragment>().navController
关于android - FragmentContainerView 使用 findNavController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59275009/