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