PopupMenu PopupWindow $ PopupViewContainer fuga
Tengo un PopupMenu
anclado a un botón en la barra de acción, y estoy recibiendo salida de registro sobre una ventana filtrada.
Esto ocurre si mi actividad se detiene mientras el PopupMenu
está abierto.
- Cómo cambiar el color de texto y el tamaño de un menú emergente en android?
- ¿Cómo puedo arreglar NoClassDefFoundError en Android para android.widget.PopupMenu?
- ¿Cómo puedo reemplazar mi código popupmenu con la lista popupwindow?
- ¿Cómo puedo editar las dimensiones de un elemento de menú PopUp en Android?
- Ancla el menú emergente sobre el botón de desbordamiento
He publicado una pregunta relacionada aquí , pero he resuelto ese problema.
He visto algunas preguntas similares, como esta , pero ninguna relacionada con PopupMenu
.
Estoy pensando si puedo conseguir una manija en el PopupWindow$PopupViewContainer
mencionado PopupWindow$PopupViewContainer
entonces podría quitarlo del WindowManager
durante onPause o algo similar, pero no sé conseguirlo. La interfaz expuesta por PopupMenu
es bastante limitada.
- ¿Alguien ha encontrado este problema?
- ¿Alguien lo arregló o trabajó alrededor de él?
- ¿Alguien sabe cómo obtener la
Window
oWindow
PopupMenu
?
Así es como creo el menú:
// in Activity @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); final MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.main_menu, menu); MenuItem login = menu.findItem(R.id.menu_login); final Button button = (Button) login.getActionView().findViewById(R.id.login); button.setOnClickListener(new View.OnClickListener() { public void onClick(View item) { if (profileMenu == null) { // I've tried passing getApplicationContext() here too, with no change profileMenu = new PopupMenu(ListActivity.this, button); profileMenu.getMenuInflater().inflate(R.menu.profile_menu, profileMenu.getMenu()); profileMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { // there was code here, but I removed it and problem persists return false; } }); } profileMenu.show(); } });
Aquí está el rastro completo de la pila:
10-24 11:10:13.878: E/WindowManager(2048): Activity **.app.ListActivity has leaked window android.widget.PopupWindow$PopupViewContainer@4157a7e8 that was originally added here 10-24 11:10:13.878: E/WindowManager(2048): android.view.WindowLeaked: Activity **.app.ListActivity has leaked window android.widget.PopupWindow$PopupViewContainer@4157a7e8 that was originally added here 10-24 11:10:13.878: E/WindowManager(2048): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:374) 10-24 11:10:13.878: E/WindowManager(2048): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:292) 10-24 11:10:13.878: E/WindowManager(2048): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224) 10-24 11:10:13.878: E/WindowManager(2048): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149) 10-24 11:10:13.878: E/WindowManager(2048): at android.widget.PopupWindow.invokePopup(PopupWindow.java:988) 10-24 11:10:13.878: E/WindowManager(2048): at android.widget.PopupWindow.showAsDropDown(PopupWindow.java:897) 10-24 11:10:13.878: E/WindowManager(2048): at android.widget.ListPopupWindow.show(ListPopupWindow.java:595) 10-24 11:10:13.878: E/WindowManager(2048): at com.android.internal.view.menu.MenuPopupHelper.tryShow(MenuPopupHelper.java:127) 10-24 11:10:13.878: E/WindowManager(2048): at com.android.internal.view.menu.MenuPopupHelper.show(MenuPopupHelper.java:100) 10-24 11:10:13.878: E/WindowManager(2048): at android.widget.PopupMenu.show(PopupMenu.java:108) 10-24 11:10:13.878: E/WindowManager(2048): at **.app.ListActivity$3.onClick(ListActivity.java:376) 10-24 11:10:13.878: E/WindowManager(2048): at android.view.View.performClick(View.java:4084) 10-24 11:10:13.878: E/WindowManager(2048): at android.view.View$PerformClick.run(View.java:16966) 10-24 11:10:13.878: E/WindowManager(2048): at android.os.Handler.handleCallback(Handler.java:615) 10-24 11:10:13.878: E/WindowManager(2048): at android.os.Handler.dispatchMessage(Handler.java:92) 10-24 11:10:13.878: E/WindowManager(2048): at android.os.Looper.loop(Looper.java:137) 10-24 11:10:13.878: E/WindowManager(2048): at android.app.ActivityThread.main(ActivityThread.java:4745) 10-24 11:10:13.878: E/WindowManager(2048): at java.lang.reflect.Method.invokeNative(Native Method) 10-24 11:10:13.878: E/WindowManager(2048): at java.lang.reflect.Method.invoke(Method.java:511) 10-24 11:10:13.878: E/WindowManager(2048): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 10-24 11:10:13.878: E/WindowManager(2048): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 10-24 11:10:13.878: E/WindowManager(2048): at dalvik.system.NativeStart.main(Native Method)
- Posición de popupmenu de Android
- Detectar que un PopupMenu está cerrado en el nivel 11 de API
- Cómo crear un PopupMenu personalizado en Android
- Color de texto del menú emergente de Android (AppCompat)
- Cambiar el color del texto de un solo elemento en un PopupMenu
- Yo uso ShareActionProvider en PopupMenu, pero mostrar dos PopupMenu?
- La mejor manera de crear menú desplegable en android 2.x como en ICS
- PopupMenu no se encuentra correctamente dentro de RecyclerView
Simplemente llamando a profileMenu.dismiss () onStop () sería suficiente.