在调用navigate()方法之前,要确保NavController已设置。以下是可能的解决方法之一:
将导航控制器(NavController)分配给Activity或Fragment:
class MyActivity : AppCompatActivity() { // ... override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(layout.main_activity)
val navController = findNavController(R.id.my_nav_host_fragment)
setSupportActionBar(findViewById(R.id.toolbar))
NavigationUI.setupActionBarWithNavController(this, navController)
}
override fun onSupportNavigateUp(): Boolean {
val navController = findNavController(R.id.my_nav_host_fragment)
return navController.navigateUp() || super.onSupportNavigateUp()
}
}
确保菜单项与NavController相关联:
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.my_menu, menu) val navController = findNavController(R.id.my_nav_host_fragment) NavigationUI.onNavDestinationSelected(item, navController) return super.onCreateOptionsMenu(menu) }
当菜单项被选中时,确保切换到正确的目标:
override fun onOptionsItemSelected(item: MenuItem): Boolean { val navController = findNavController(R.id.my_nav_host_fragment) return when (item.itemId) { R.id.action_first_fragment -> { navController.navigate(R.id.firstFragment) true } R.id.action_second_fragment -> { navController.navigate(R.id.secondFragment) true } else -> super.onOptionsItemSelected(item) } }