在片段内使用 Android 具有单个活动、布局抽屉和工具栏的导航组件
Using Android navigation component with single activiy, layout drawer and toolbars inside fragments
是否可以在每个片段都有自己的工具栏的单个 activity 应用程序中使用 Android 导航 component/graph?
此外,容器 activity 有一个导航抽屉,需要使用工具栏和导航控制器进行设置,但在创建 activity 时我还没有工具栏。
我正在使用这段代码(在 onCreate 中调用)
private fun setupNavigation() {
// val toolbar = findViewById<Toolbar>(R.id.toolbar);
// setSupportActionBar(toolbar);
// supportActionBar!!.setDisplayHomeAsUpEnabled(true);
// supportActionBar!!.setDisplayShowHomeEnabled(true);
val drawerLayout = findViewById<DrawerLayout>(R.id.drawer_layout);
val navigationView = findViewById<NavigationView>(R.id.drawer_navigation_view);
val navController = Navigation.findNavController(this, R.id.navigation_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, drawerLayout)
NavigationUI.setupWithNavController(navigationView, navController)
navigationView.setNavigationItemSelectedListener(this)
}
但是因为我当时没有工具栏,所以它会抛出一个错误(ActionBar.setTitle 调用了一个空对象)。
是否可以使用这个,或者我需要放弃在这种情况下使用导航组件的想法?
唯一的要求是在调用 setSupportActionBar()
之后调用 setupActionBarWithNavController
。如果您在 Fragment 中这样做,那么只需在之后直接调用 setupActionBarWithNavController
。
例如,在您的片段中:
private fun onViewCreated(view: View, bundle: savedInstanceState) {
val toolbar = view.findViewById<Toolbar>(R.id.toolbar);
// Set the Toolbar as your activity's ActionBar
requireActivity().setSupportActionBar(toolbar);
// Find the activity's DrawerLayout
val drawerLayout = requireActivity().findViewById<DrawerLayout>(R.id.drawer_layout);
// Find this Fragment's NavController
val navController = NavHostFragment.findNavController(this);
// And set up the ActionBar
NavigationUI.setupActionBarWithNavController(this, navController, drawerLayout)
}
还有一个单独的 NavigationUI.setupWithNavController()
方法接受 Toolbar
。如果您实际上没有使用任何其他 ActionBar API,这将是合适的。
是否可以在每个片段都有自己的工具栏的单个 activity 应用程序中使用 Android 导航 component/graph?
此外,容器 activity 有一个导航抽屉,需要使用工具栏和导航控制器进行设置,但在创建 activity 时我还没有工具栏。
我正在使用这段代码(在 onCreate 中调用)
private fun setupNavigation() {
// val toolbar = findViewById<Toolbar>(R.id.toolbar);
// setSupportActionBar(toolbar);
// supportActionBar!!.setDisplayHomeAsUpEnabled(true);
// supportActionBar!!.setDisplayShowHomeEnabled(true);
val drawerLayout = findViewById<DrawerLayout>(R.id.drawer_layout);
val navigationView = findViewById<NavigationView>(R.id.drawer_navigation_view);
val navController = Navigation.findNavController(this, R.id.navigation_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, drawerLayout)
NavigationUI.setupWithNavController(navigationView, navController)
navigationView.setNavigationItemSelectedListener(this)
}
但是因为我当时没有工具栏,所以它会抛出一个错误(ActionBar.setTitle 调用了一个空对象)。
是否可以使用这个,或者我需要放弃在这种情况下使用导航组件的想法?
唯一的要求是在调用 setSupportActionBar()
之后调用 setupActionBarWithNavController
。如果您在 Fragment 中这样做,那么只需在之后直接调用 setupActionBarWithNavController
。
例如,在您的片段中:
private fun onViewCreated(view: View, bundle: savedInstanceState) {
val toolbar = view.findViewById<Toolbar>(R.id.toolbar);
// Set the Toolbar as your activity's ActionBar
requireActivity().setSupportActionBar(toolbar);
// Find the activity's DrawerLayout
val drawerLayout = requireActivity().findViewById<DrawerLayout>(R.id.drawer_layout);
// Find this Fragment's NavController
val navController = NavHostFragment.findNavController(this);
// And set up the ActionBar
NavigationUI.setupActionBarWithNavController(this, navController, drawerLayout)
}
还有一个单独的 NavigationUI.setupWithNavController()
方法接受 Toolbar
。如果您实际上没有使用任何其他 ActionBar API,这将是合适的。