检测到API级别11上的PopupMenu已关闭

时间:2012-10-15 22:42:57

标签: android popupmenu

我的应用程序中有PopupMenu,想知道它什么时候关闭。 使用API​​14 +,在使用setOnDismissListener()添加dismiss侦听器时很容易。 但是,我需要知道PopupMenu何时从API11 +关闭,所以我不能使用监听器并需要一个替代侦听器。

我已经尝试过了:

  • 覆盖PopupMenu的dismiss()方法,但在关闭时不会调用它。
  • 使用PopupMenu.OnMenuItemClickListener,但当用户点击菜单外部(关闭它)或点击“返回”时,它不会被激活。

我没有任何其他想法来检测菜单已关闭。所以我希望其他人有一个聪明的伎俩。否则我不能使用PopupMenu ...

1 个答案:

答案 0 :(得分:1)

您可以尝试覆盖方法

public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing)
PopupMenu课程的

。确切地说,此方法在API 14+内部调用setOnDismissListener()。但这并不容易。问题是Android SDK中不包含类com.android.internal.view.menu.MenuBuilder,因此如果您尝试导入此类,则无法编译代码。

但是,你可以创建自己的“假”实现,将它放在包com.android.internal.view.menu中,用它制作一个.jar文件,将这个“假库”复制到{{1}在IntelliJ IDEA的项目设置中将此库的文件夹和设置范围设置为“已提供”。这意味着此libs文件中的类已经具有真实设备(这是真的),您只需要它们来编译代码。这里的主要想法 - 您的假jar应该在MenuBuilder编译的类路径中,但应包含在结果javac文件中。

这不是一个简单的解决方案,但应该可行。