gpt4 book ai didi

android - FragmentContainerView 使用 findNavController

转载 作者:行者123 更新时间:2023-12-03 07:31:04 34 4
gpt4 key购买 nike

我正在使用带有底部导航的 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/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com