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
相关产品推荐
相关产品推荐

