相关疑难解决方法(0)

FragmentContainerView 使用 findNavController

我正在使用带有底部导航的 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" />
Run Code Online (Sandbox Code Playgroud)

活动

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)
}
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-navigation

44
推荐指数
2
解决办法
1万
查看次数

如果我使用视图绑定,如何找到 NavController?

通常,我val navController: NavController = findNavController(R.id.nav_host_fragment)在代码 A 中使用来查找 NavController,它基于R.id.nav_host_fragment.

现在我在应用程序中使用视图绑定,就像代码B一样,如果我使用视图绑定,我该如何使用NavController?

顺便说一句,在我看来, R.id.nav_host_fragment视图绑定将不可用,对吧?

代码A

class TasksActivity : AppCompatActivity() { 

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.tasks_act)

        val navController: NavController = findNavController(R.id.nav_host_fragment)
     }
 
}
Run Code Online (Sandbox Code Playgroud)

代码B

class TasksActivity : AppCompatActivity() {
    
    private lateinit var binding: TasksActBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = TasksActBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)       
      
        //val navController: NavController = findNavController(R.id.nav_host_fragment)       
    }

}
Run Code Online (Sandbox Code Playgroud)

任务_act.xml

<androidx.drawerlayout.widget.DrawerLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".tasks.TasksActivity"
    tools:openDrawer="start">

    <LinearLayout
        android:layout_width="match_parent" …
Run Code Online (Sandbox Code Playgroud)

android android-jetpack

5
推荐指数
1
解决办法
6107
查看次数