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


¿Cómo actualizar un elemento de menú que se muestra en la barra de acción?

Tengo una Actividad que tiene 2 fragmentos. Ambos son ListFragments y ambos contribuyen MenuItems al menú. Tengo un MenuItem que he establecido el atributo android: showAsAction para que se muestre como un botón en el ActionBar. Que funciona bien.

Ahora el MenuItem depende del estado. Es una opción de menú Pausa / Reanudar para detener y reanudar una cola. Mi problema es que no puedo averiguar cómo establecer su estatua inicial cuando se crea el fragmento.

  • Cómo descartar el teclado en Android SearchView?
  • ¿Existe una forma estándar de agregar divisores entre los elementos de barra de acción en Android 3.0?
  • Sombra debajo de Actionbar-compat al usar rellenos
  • ¿Cómo puedo forzar la barra de acción a estar en la parte inferior de ICS?
  • Spinner de ancho completo en ActionBar
  • Android ActionBar ocultar / mostrar cuando se desplaza vista de lista
  • Su estado depende de si la cola está pausada o no. Así que tengo un AsyncTask que obtiene la cola y establece un booleano (pausado) basado en el estado de la cola. Estoy llamando onPrepareOptionsMenu para establecer el texto para el elemento de menú Pausa basado en el último estado conocido de la cola y esto funciona muy bien si dejo el MenuItem en el menú real. Toque en el icono de menú y se enciende OnPrepareOptionsMenu y se actualiza el menú antes de que se muestre.

    El problema es, si pongo ese mismo MenuItem en ActionBar (showAsAction), ¿cómo puedo forzarlo a actualizar sin tener que llamar a onPrepareOptionsMenu? Tengo que ser capaz de hacer esto porque en el primer lanzamiento de la aplicación, enviar una solicitud para obtener la cola, pero la tarea vuelve después de la ActionBar es la configuración y se muestra. He creado un controlador en mi fragmento que se llama cada vez que recibo una actualización de cola, pero a partir de ahí, ¿cómo puedo actualizar el texto de mi MenuItem en el ActionBar? Parece que no puedo encontrar una manera de obtener el menú actualmente configurado para manipularlo excepto en onPrepareOptionMenu.

    Rob W.

  • Artículos de la barra de herramientas de Android como tres puntos
  • Personalización de la animación de navegación
  • Cambiar la elevación de la barra de acción por tema
  • ¿Cómo "instalar" Action Bar Sherlock?
  • Icono del recuento de notificaciones de Actionbar (insignia) como Google
  • ¿Cómo agregar divisores entre elementos de menú específicos?
  • 6 Solutions collect form web for “¿Cómo actualizar un elemento de menú que se muestra en la barra de acción?”

    Opción # 1: Intentar invalidateOptionsMenu() . No sé si esto forzará un rediseño inmediato de la barra de acción o no.

    Opción # 2: Ver si getActionView() devuelve cualquier cosa para el MenuItem afectado. Es posible que showAsAction simplemente cree automáticamente vistas de acción para usted. Si es así, puede presumiblemente habilitar / deshabilitar esa View .

    Parece que no puedo encontrar una manera de obtener el menú actualmente configurado para manipularlo excepto en onPrepareOptionMenu.

    Usted puede colgar en el objeto de Menu que fueron entregados onCreateOptionsMenu() . Citando los documentos :

    Puede mantener presionado el menú (y cualquier elemento creado a partir de él), realizando modificaciones en él como desee, hasta la próxima vez que se llame OnCreateOptionsMenu ().

    En mi caso: invalidateOptionsMenu acaba de reestablecer el texto al original, pero acceder directamente al elemento de menú y volver a escribir el texto de deseo trabajado sin problemas:

     if (mnuTopMenuActionBar_ != null) { MenuItem mnuPageIndex = mnuTopMenuActionBar_ .findItem(R.id.menu_magazin_pageOfPage_text); if (mnuPageIndex != null) { if (getScreenOrientation() == 1) { mnuPageIndex.setTitle((i + 1) + " von " + pages); } else { mnuPageIndex.setTitle( (i + 1) + " + " + (i + 2) + " " + " von " + pages); } // invalidateOptionsMenu(); } } 

    Debido al comentario a continuación, pude acceder al elemento de menú mediante el siguiente código:

     @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.magazine_swipe_activity, menu); mnuTopMenuActionBar_ = menu; return true; } 

    Para actualizar el menú de Fragment simplemente llame al:

     getActivity().invalidateOptionsMenu(); 

    He utilizado este código:

     public boolean onPrepareOptionsMenu (Menu menu) { MenuInflater inflater = getMenuInflater(); TextView title = (TextView) findViewById(R.id.title); menu.getItem(0).setTitle( getString(R.string.payFor) + " " + title.getText().toString()); menu.getItem(1).setTitle(getString(R.string.payFor) + "..."); return true; } 

    Y funcionó como un encanto para mí usted puede encontrar OnPrepareOptionsMenu aquí

    Para mayor claridad, pensé que un ejemplo directo de agarrar a un recurso se puede mostrar de lo siguiente que creo que contribuye a la respuesta para esta pregunta con un ejemplo directo rápido.

     private MenuItem menuItem_; @Override public boolean onCreateOptionsMenu(Menu menuF) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_layout, menuF); menuItem_ = menuF.findItem(R.id.menu_item_identifier); return true; } 

    En este caso, mantenga una referencia MenuItem al principio y luego cambie el estado de la misma (por ejemplo, para los cambios en el estado del icono) en un punto dado más tarde.

     First please follow the two lines of codes to update the action bar items before that you should set a condition in oncreateOptionMenu(). For example: Boolean mISQuizItemSelected =false; /** * Called to inflate the action bar menus *. * * @param menu the menu * @return true, if successful */ @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu items for use in the action bar inflater.inflate(R.menu.menu_demo, menu); //condition to hide the menus if(mISQuizItemSelected) { for (int i = 0; i < menu.size(); i++) menu.getItem(i).setVisible(false); } return super.onCreateOptionsMenu(menu); } /** * Called when the item on the action bar being selected. * * @param item menuitem being selected * @return true if the menuitem id being selected is matched * false if none of the menuitems id are matched */ @Override public boolean onOptionsItemSelected(MenuItem item) { if(item.getId()==R.id.action_quiz) { //to navigate based on the usertype either learner or leo mISQuizItemSelected=true; ActionBar actionBar = getActionBar(); invalidateOptionMenu(); } } 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.