android - FragmentContainerView 使用 findNavController

标签 android android-layout android-fragments android-navigation

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

相关文章:

android - 我如何替换android中gridview中的单个图像?

android - 默认的 Android Studio 抽屉导航图标

android - 如何从一个Bundle获取值到另一个Fragment

NativeScript中PDF打印的Android实现

Android 服务的 onBind 未被调用,即使连接了客户端也正在调用 onDestroy

java - 如何在 Android 动态壁纸中添加布局

android - 边距属性在自定义 DialogFragment 中不起作用

java - 从父 Activity 访问 Fragment 对象

android - 当 GPS 不可用时,如何在手机移动时收到通知?

android - Google Play 服务缺少必需的 XML 属性 "adSize"