Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Detectar que un PopupMenu está cerrado en el nivel 11 de API

Tengo este PopupMenu en mi aplicación y me gustaría saber cuándo está cerrado. Con API14 + esto es fácil al agregar un oyente de despido con setOnDismissListener() . Pero, necesito saber cuando el PopupMenu se cierra de API11 +, así que no puedo utilizar el oyente y necesito una alternativa para el oyente.

Esto ya he intentado:

  • Sobrescribe el método dismiss() del PopupMenu, pero no se llama cuando se cierra.
  • PopupMenu.OnMenuItemClickListener el PopupMenu.OnMenuItemClickListener , pero no se activa cuando el usuario hace clic fuera del menú (para cerrarlo) o hace clic en "atrás".

No tengo ninguna otra idea para detectar que el menú estaba cerrado. Así que espero que alguien más tenga un truco inteligente. De lo contrario no puedo usar PopupMenu …

One Solution collect form web for “Detectar que un PopupMenu está cerrado en el nivel 11 de API”

Puede intentar anular el método

 public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) 

De la clase PopupMenu . Exactamente este método está llamando a setOnDismissListener() internamente en API 14+. Pero esto no es fácil de hacer. El problema es qué clase com.android.internal.view.menu.MenuBuilder no está incluido en Android SDK, por lo que no podrá compilar su código si intenta importar esta clase.

Sin embargo, puedes crear tu propia implementación "falsa" de esta clase, colocarla en el paquete com.android.internal.view.menu , hacer un archivo .jar con ella, copiar esta "biblioteca falsa" a la carpeta libs y establecer el alcance de Esta biblioteca en Configuración del proyecto de IntelliJ IDEA como "proporcionado". Esto significa que las clases en este archivo jar ya tienen dispositivos reales (lo que es cierto) y sólo los necesita para compilar su código. Idea principal aquí – su fake MenuBuilder debe estar en classpath para la compilación javac , pero no debe ser incluido en el archivo .apk resultante.

Esto no es una solución fácil, pero debería funcionar.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.