我有这个PopupMenu在我的应用程序中,想知道它什么时候关闭。
使用 API14+,使用 setOnDismissListener()
添加关闭监听器时,这很容易。
但是,我需要知道 PopupMenu 何时从 API11+ 关闭,所以我不能使用监听器并且需要监听器的替代方案。
我已经尝试过:
- 覆盖PopupMenu的
dismiss()
方法,但关闭时不调用。 - 使用
PopupMenu.OnMenuItemClickListener
,但当用户在菜单外单击(关闭它)或单击“返回”时,它不会被激活。
我没有任何其他想法来检测菜单已关闭。所以我希望其他人有一个聪明的把戏。否则我无法使用 PopupMenu...
最佳答案
你可以尝试覆盖方法
public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing)
PopupMenu
类。确切地说,此方法是在 API 14+ 内部调用 setOnDismissListener()
。但这并不容易做到。问题是什么类 com.android.internal.view.menu.MenuBuilder
没有包含在 Android SDK 中,所以如果您尝试导入这个类,您将无法编译您的代码。
然而,你可以创建你自己的这个类的“假”实现,将它放在包 com.android.internal.view.menu
中,制作一个 .jar
文件,将这个“假库”复制到 libs
文件夹,并在 IntelliJ IDEA 的项目设置中将此库的范围设置为“已提供”。这意味着这个 jar
文件中的类已经有了真实的设备(这是真的),你只需要它们来编译你的代码。这里的主要思想 - 你的假 MenuBuilder
应该在 javac
编译的类路径中,但应该不包含在生成的 .apk中
文件。
这不是简单的解决方案,但应该可行。
关于android - 检测到 PopupMenu 在 API 级别 11 上关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12905048/