2012-06-25 10 views
8

Tengo un menú en mi aplicación Android. Cuando hago clic en agregar favoritos, necesito volver a cargar las opciones del menú, haciendo que aparezca entre los favoritos en las opciones y no aparezca agregar favoritos.cómo volver a cargar el menú Android en la misma actividad?

No quiero utilizar la actividad de recarga debido al botón Atrás.

Mi código:

public boolean onCreateOptionsMenu(Menu menu) { 
    try 
    { 
     MenuItem menuInicio = menu.add(INICIO, INICIO, 0, "Início"); 
     menuInicio.setIcon(android.R.drawable.ic_menu_edit); 

     MenuItem menuBusca = menu.add(BUSCA, BUSCA, 0, "Buscar"); 
     menuBusca.setIcon(android.R.drawable.ic_menu_search); 

     SubMenu menuFavoritos = menu.addSubMenu(FAVORITOS, FAVORITOS, 0, "Favoritos"); 
     if(!phytoterapicContent.getPhytoterapicItem().getIsFav()) 
      menuFavoritos.add(FAVORITOS, ADD_FAV, 0, "Adicionar aos Favoritos"); 
     else 
      menuFavoritos.add(FAVORITOS, DEL_FAV, 1, "Remover dos Favoritos"); 
     menuFavoritos.add(FAVORITOS, LIST_FAV, 2, "Listar Favoritos"); 
     menuFavoritos.setIcon(android.R.drawable.star_off); 
     } 
     catch (Exception e) { 
     }    
     return super.onCreateOptionsMenu(menu); 
    } 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case INICIO: 
      Intent it = new Intent(ShowPhytoterapicActivity.this, HomeActivity.class); 
      startActivity(it); 
      break; 
     case BUSCA: 
      Intent it3 = new Intent(ShowPhytoterapicActivity.this, ShowSearchParametersActivity.class); 
      startActivity(it3); 
      break; 
     case ADD_FAV: 
      try { 
       Dao<PhytoterapicItem, Integer> phytoterapicItemDao = getHelper().getPhytoterapicItemDao(); 
       phytoterapicContent.getPhytoterapicItem().setIsFav(true); 
       phytoterapicItemDao.update(phytoterapicContent.getPhytoterapicItem()); 
       Toast.makeText(ShowPhytoterapicActivity.this, "Adicionado aos Favoritos", Toast.LENGTH_LONG).show(); 
      } catch (SQLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      break; 
     case DEL_FAV: 
      try { 
       Dao<PhytoterapicItem, Integer> phytoterapicItemDao = getHelper().getPhytoterapicItemDao(); 
       phytoterapicContent.getPhytoterapicItem().setIsFav(false); 
       phytoterapicItemDao.update(phytoterapicContent.getPhytoterapicItem()); 
       Toast.makeText(ShowPhytoterapicActivity.this, "Removido dos Favoritos", Toast.LENGTH_LONG).show(); 
      } catch (SQLException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      break; 
     case LIST_FAV: 
      Intent it5 = new Intent(ShowPhytoterapicActivity.this, ShowFavoritesActivity.class); 
      startActivity(it5); 
      break; 
    } 
    return true; 
} 

Gracias!

Respuesta

36

uso onPrepareOptionsMenu

Preparar menú de opciones estándar de la pantalla a visualizar. Esto se llama justo antes de que se muestre el menú, cada vez que se muestra. Puede usar este método para habilitar/deshabilitar elementos de manera eficiente o modificar dinámicamente los contenidos.

@Override 
public boolean onPrepareOptionsMenu(Menu menu) { 
    menu.clear(); 
    if(isChangedStat) { 
     menu.add(0, MENUITEM, 0, "True"); 
    } else { 
     menu.add(0, MENUITEM, 0, "False"); 
    } 
    return super.onPrepareOptionsMenu(menu); 
} 

Tenga en cuenta dos puntos

1- Si es posible simplemente activar o desactivar la opción de menú o se ve posible en su caso puede cambiar el título del mismo menú funcionará porque menu.clear(); pueden necesitar más atención durante la manipulación de

2- según enlace proporcionado por Atlos

En 2.3.x Android e inferior, el sistema llama onPrepareOptionsMenu() cada vez que el usuario abre el menú de opciones (presses the Menu button).

En Android 3.0 y versiones posteriores, se considera que el menú de opciones siempre está abierto cuando los elementos del menú se presentan en la barra de acciones. Cuando ocurre un evento y desea realizar una actualización de menú, you must call invalidateOptionsMenu() para solicitar que el sistema llame aPrepareOptionsMenu().

Cuestiones relacionadas