ventanas permitir internet habilitar extension emergentes desbloquear complemento como chrome bloquear android checkbox popupmenu

android - permitir - Cómo evitar que se cierre el menú emergente al hacer clic en la casilla de verificación



permitir ventanas emergentes firefox (6)

El truco aquí es mostrar el menú justo después de descartarlo.
Debajo hay un fragmento de código de muestra:

popupMenu.setOnMenuItemClickListener(new OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { if(item.getItemId()==R.id.search_by_date_checkbox){ item.setChecked(!item.isChecked()); } //This is the trick here!!!! popupMenu.show(); return true; } });

¡Puedes probar este truco con tu código! Así es como lo hice. :)

Busco mucho en la red, pero no hay nada sobre cómo evitar que se cierre el menú emergente.

Cada vez que hago clic en el elemento de la casilla de verificación o en cualquier otro elemento del menú emergente, el menú emergente se descarta. ¿Cómo puedo evitar que se descarte cuando el usuario marque / desmarque la casilla de verificación en el menú emergente?

Estoy mostrando el menú emergente en el evento de clic del elemento barra de acciones.

//main_menu.xml <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" tools:context="com.worldofjobs.woj.MainActivity" > <item android:id="@+id/action_popUpMenu" android:icon="@drawable/ic_action_overflow" android:title="@string/main_action_popUpMenu" app:showAsAction="always"/> </menu> //popup_items.xml <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/refresh_item" android:title="@string/main_refresh"/> <item android:id="@+id/checkbox_item" android:checkable="true" android:title="Start notification"/> <item android:id="@+id/changePasswrod_item" android:title="@string/main_changePassword"/> <item android:id="@+id/deleteAccount_item" android:title="@string/main_deleteAccount"/> <item android:id="@+id/logout_item" android:title="@string/main_logout"/> </menu> /** * Shows popup menu on click of action bar-menu inflates from * menu.pop_items-xml */ private void showPopup() { try { View v = findViewById(R.id.action_popUpMenu); PopupMenu popup = new PopupMenu(this, v); popup.setOnMenuItemClickListener(MainActivity.this); MenuInflater inflater = popup.getMenuInflater(); inflater.inflate(R.menu.pop_items, popup.getMenu()); popup.show(); } catch (Exception e) { Log.e("MainActivity-showPopup:", e.toString()); } } /** * Handles click events of popup menu items */ @Override public boolean onMenuItemClick(MenuItem item) { super.onMenuItemSelected(1, item); switch (item.getItemId()) { case R.id.refresh_item: refresh(); return true; case R.id.checkbox_item: return true; case R.id.changePasswrod_item: changePasswordPopup(); return true; case R.id.deleteAccount_item: deleteAccount(); return true; case R.id.logout_item: session.logout(); finish(); return true; } return true; }


El uso de popupMenu.show() para volver a mostrar inmediatamente el menú emergente no funciona correctamente con elementos de menú seleccionables al cambiar sus estados marcados.

Aquí un método que evita el cierre del menú emergente en primer lugar. Asegúrese de que onMenuItemClick devuelva falso.

popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { item.setChecked(!item.isChecked()); // Do other stuff // Keep the popup menu open item.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); item.setActionView(new View(context)); item.setOnActionExpandListener(new MenuItem.OnActionExpandListener() { @Override public boolean onMenuItemActionExpand(MenuItem item) { return false; } @Override public boolean onMenuItemActionCollapse(MenuItem item) { return false; } }); return false; } });


En tu caso R.id.checkbox_item

return false;

Esto le indicará al sistema que el evento aún no se ha procesado y no atenuará el menú. Vea AQUÍ


Intenta declarar el PopupMenu globalmente y llama a popup.show(); antes de volverse verdadero en la función onMenuItemClick .


La respuesta de Oliver anterior ( https://.com/a/31727213/2423194 ) me provocó un bloqueo y su mensaje me MenuItemCompat usara MenuItemCompat . Después de algunos ajustes a este código, funciona:

// Keep the popup menu open item.setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW); item.setActionView(new View(getContext())); MenuItemCompat.setOnActionExpandListener(item, new MenuItemCompat.OnActionExpandListener() { @Override public boolean onMenuItemActionExpand(MenuItem item) { return false; } @Override public boolean onMenuItemActionCollapse(MenuItem item) { return false; } });

Gracias Oliver!


Lo conseguí trabajando agregando popup.show (); al hacer clic en el botón y al final del clic.

final ImageButton layerButton = (ImageButton) findViewById(R.id.layers); final PopupMenu popup = new PopupMenu(MapsActivity.this, layerButton); popup.getMenuInflater().inflate(R.menu.toolbar_menu, popup.getMenu()); layerButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //Here popup.show(); popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { handleClicksOnCheckBoxes(item); return true; } }); //And here popup.show(); } });

Sin embargo, esta no es una solución óptima porque si la lista tiene tantos elementos que será posible desplazarse por la lista, la lista se desplazará hacia arriba al hacer clic en un elemento.