Android中点击PopupMenu菜单项后无法关闭的问题求助
我看了你的代码,问题主要出在菜单点击事件的返回值处理上,给你两个可行的修复方案:
方案一:修改返回值为true(推荐)
PopupMenu的OnMenuItemClickListener接口中,返回true表示你已经处理完该菜单点击事件,系统会自动帮你关闭PopupMenu,完全不需要手动调用dismiss()。你的代码里返回了false,系统会认为你还没处理完事件,所以不会触发自动关闭逻辑。修改后的代码如下:
PopupMenu popup = new PopupMenu(this, edit1); //inflating menu from xml resource popup.inflate(R.menu.options_menu); popup.getMenu().add("one"); popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { Toast.makeText(MainActivity.this, "You Clicked : " + item.getTitle(), Toast.LENGTH_SHORT).show(); // 返回true,让系统自动关闭菜单 return true; } }); //displaying the popup popup.show();
方案二:手动调用dismiss()的正确姿势
如果你一定要手动控制菜单关闭,需要确保popup变量是final的(避免内部类引用问题),同时返回true来终止系统的后续事件处理:
final PopupMenu popup = new PopupMenu(this, edit1); // 添加final修饰 popup.inflate(R.menu.options_menu); popup.getMenu().add("one"); popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { Toast.makeText(MainActivity.this, "You Clicked : " + item.getTitle(), Toast.LENGTH_SHORT).show(); popup.dismiss(); return true; // 必须返回true,避免系统干扰关闭流程 } }); popup.show();
补充小建议
尽量通过菜单项的id来判断点击项(比如item.getItemId() == R.id.your_menu_id),而不是依赖标题文字,这样在多语言环境下不会出现匹配失败的问题。
内容的提问来源于stack exchange,提问作者basha
相关产品推荐
相关产品推荐

