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

NavigationView结合CollapsingToolbar时onOptionsItemSelected无Toast问题求助

问题排查与解决方案

嘿,我一眼就看出问题所在啦!你是把NavigationView侧滑菜单和ActionBar顶部选项菜单的点击处理逻辑搞混了,这才导致Toast没显示的~

核心问题分析

你的onOptionsItemSelected()方法是专门用来处理顶部ActionBar/工具栏上的选项菜单点击事件的,但如果你的R.id.item1是放在NavigationView的侧滑菜单里的,那点击它只会触发onNavigationItemSelected()方法,根本不会走到onOptionsItemSelected()里,Toast当然就弹不出来啦!

针对性解决方案

分两种情况给你解决办法:

情况1:item1是侧滑菜单里的选项

直接把Toast的逻辑移到onNavigationItemSelected()里就行,修改后的代码如下:

override fun onNavigationItemSelected(menuItem: MenuItem): Boolean {
    menuItem.isChecked = true
    
    // 在这里处理侧滑菜单项的点击
    when(menuItem.itemId) {
        R.id.item1 -> {
            Toast.makeText(this, "Item 1 pressed", Toast.LENGTH_LONG).show()
        }
        // 可以继续添加其他侧滑菜单项的处理逻辑
        // R.id.item2 -> { ... }
    }
    
    closeDrawer()
    return true
}

情况2:item1是顶部ActionBar的选项菜单

那你得先确保正确加载了ActionBar的菜单,也就是重写onCreateOptionsMenu()方法:

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    // 替换成你自己的ActionBar菜单资源路径
    menuInflater.inflate(R.menu.your_action_bar_menu, menu)
    return true
}

同时要确认你的菜单XML文件(比如your_action_bar_menu.xml)里确实有android:id="@+id/item1"的菜单项,另外别忘了给Toolbar设置为ActionBar:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    
    // 关键:把toolbar设置为ActionBar
    setSupportActionBar(main_toolbar)
    
    // 其他原有代码...
    main_nav_view.setNavigationItemSelectedListener(this)
    val toggle = ActionBarDrawerToggle(
        this,
        main_drawer_layout,
        main_toolbar,
        R.string.navigation_drawer_open,
        R.string.navigation_drawer_close
    )
    main_drawer_layout.addDrawerListener(toggle)
    toggle.syncState()
}

这样顶部ActionBar的菜单才能正常显示,点击时onOptionsItemSelected()里的Toast就会触发了。

内容的提问来源于stack exchange,提问作者Mohamed Wessam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:15:04