Kotlin底部导航Activity中Fragment的ActionBar标题与图标不显示问题
问题解决步骤
核心根因
你在项目中同时引入了Jetpack Navigation组件,又手动编写了Fragment事务切换逻辑,两者逻辑冲突导致导航图的配置(包括Fragment标签、自动切换逻辑)无法生效。
问题1:ActionBar不显示Fragment对应标题
修复步骤:
- 清空
DashboardActivity.kt中原有手动切换Fragment的逻辑,替换为Navigation组件绑定逻辑,修改后完整的onCreate代码如下:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_dashboard) // 绑定导航控制器 val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment val navController = navHostFragment.navController // 关联ActionBar与导航,自动加载导航图中配置的label作为标题 val appBarConfiguration = AppBarConfiguration( setOf(R.id.navigation_dashboard, R.id.navigation_products, R.id.navigation_orders) ) setupActionBarWithNavController(navController, appBarConfiguration) // 绑定底部导航与导航控制器,自动处理Fragment切换 nav_view.setupWithNavController(navController) }
- 删除
DashboardActivity.kt中原有changeFragments方法、以及手动编写的nav_view.setOnNavigationItemSelectedListener逻辑,全部交由Navigation组件自动处理。 - 确认
strings.xml中已定义title_dashboard、title_products、title_orders三个字符串资源,对应导航图中配置的label值。
问题2:ActionBar右上角跳转图标不显示
修复步骤:
- 检查
AndroidManifest.xml中DashboardActivity的主题配置,确保使用的是带ActionBar的主题,不要使用NoActionBar类型的主题;如果你使用自定义Toolbar,需要在onCreate中先调用setSupportActionBar(你的Toolbar实例),再执行上面的导航绑定逻辑。 - 检查菜单文件
res/menu/dashboard_menu.xml中对应条目的showAsAction配置,需使用AppCompat命名空间下的属性,示例配置如下:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_settings" android:icon="@drawable/ic_settings" android:title="@string/action_settings" app:showAsAction="ifRoom" /> </menu>
- 若其他Fragment也需要显示对应菜单,需要在对应Fragment的
onCreate方法中添加setHasOptionsMenu(true)配置,当前你仅在DashboardFragment中添加了该配置,其余Fragment默认不会加载菜单。
内容的提问来源于stack exchange,提问作者Gibson Raphael
相关产品推荐
相关产品推荐

