Android Drawer Navigation菜单点击无响应,如何解决?
你的代码存在几个关键问题,导致抽屉菜单点击无响应:
- 重复调用
setContentView,造成视图初始化混乱 - 没有给
NavigationView绑定OnNavigationItemSelectedListener监听器 - 错误地用
onCreateOptionsMenu处理抽屉菜单(这个方法是给ActionBar菜单用的,和抽屉里的NavigationView无关) onNavigationItemSelected返回false,无法触发抽屉关闭逻辑
修复步骤
- 移除重复的
setContentView(R.layout.layout_test),只保留ViewBinding的初始化逻辑 - 在
onCreate中给binding.navView设置选中监听器 - 删除多余的
onCreateOptionsMenu方法 - 修改
onNavigationItemSelected的返回值为true,点击菜单后自动关闭抽屉
修改后的test.kt代码
class test : AppCompatActivity(), NavigationView.OnNavigationItemSelectedListener { private lateinit var binding: LayoutTestBinding override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 移除重复的setContentView调用 binding = LayoutTestBinding.inflate(layoutInflater) setContentView(binding.root) binding.menu.setOnClickListener { binding.drawerLayout.openDrawer(GravityCompat.END) } // 给NavigationView设置监听器 binding.navView.setNavigationItemSelectedListener(this) } override fun onNavigationItemSelected(item: MenuItem): Boolean { when(item.itemId){ R.id.logout_menu -> { Toast.makeText(this@test,"logout", Toast.LENGTH_SHORT).show() } R.id.menu2 -> { Toast.makeText(this@test,"dddddd", Toast.LENGTH_SHORT).show() } R.id.menu1 -> { Toast.makeText(this@test,"?????", Toast.LENGTH_SHORT).show() } } // 关闭抽屉并返回true,表示事件已处理 binding.drawerLayout.closeDrawer(GravityCompat.END) return true } }
内容的提问来源于stack exchange,提问作者jyk
相关产品推荐
相关产品推荐

