You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin修改NavigationView菜单项标题无效问题求助

问题根源与解决方案

对,你猜的完全没错!问题核心就是你一直在修改OptionsMenu的菜单实例,但实际显示的菜单属于NavigationView,两者根本不是同一个对象——这就好比你修改了A笔记本上的内容,却盯着B笔记本看,当然看不到变化啦,哪怕Toast能拿到修改后的标题,那也只是A笔记本里的内容而已。

正确的解决步骤:

直接操作NavigationView自己持有的菜单对象,而不是依赖onCreateOptionsMenu里的menuList:

  1. 获取NavigationView实例
    先拿到你的NavigationView对象,比如通过findViewById:
val navView = findViewById<NavigationView>(R.id.oldsip)
  1. 定位到目标子菜单项
    因为你的adres是嵌套在sipariscx的子菜单里的,所以得先找到父菜单项,再获取子菜单:
// 找到父菜单项 sipariscx
val parentMenuItem = navView.menu.findItem(R.id.sipariscx)
// 获取它的子菜单
val subMenu = parentMenuItem.subMenu
// 找到目标子菜单项 adres
val adresMenuItem = subMenu.findItem(R.id.adres)
  1. 修改标题并刷新NavigationView
    修改标题后,调用NavigationView的invalidateMenu()方法让界面刷新:
adresMenuItem.setTitle("asdklzmfkldfvsas")
// 刷新NavigationView,让修改生效
navView.invalidateMenu()

// 验证修改结果
Toast.makeText(this, adresMenuItem.title.toString(), Toast.LENGTH_LONG).show()

为什么之前的方法无效?

你在onCreateOptionsMenu中保存的menuList是Android系统为Activity的OptionsMenu(比如顶部工具栏的菜单)创建的实例,而NavigationView的菜单是通过app:menu属性单独加载的独立Menu对象,两者没有任何关联,所以修改OptionsMenu的内容自然不会影响NavigationView的显示。

备选方案(如果invalidateMenu不生效)

如果调用invalidateMenu()后还是没变化,可以尝试重新加载菜单:

// 清空现有菜单,重新加载
navView.menu.clear()
navView.inflateMenu(R.menu.gecmissiparis)
// 重新定位菜单项并修改(重复步骤2和3)

内容的提问来源于stack exchange,提问作者Oğuz Kurukaya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 18:44:07