2012-06-25 5 views
8

Ho un menu nella mia app Android. Quando faccio clic su Aggiungi preferiti, ho bisogno di ricaricare le opzioni del menu, facendolo apparire tra i preferiti nelle opzioni e non apparire aggiungendo i preferiti.come ricaricare il menu Android nella stessa attività?

Non voglio utilizzare l'attività di ricarica a causa del pulsante Indietro.

Il mio codice:

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; 
} 

Grazie!

risposta

36

uso onPrepareOptionsMenu

Preparare menu delle opzioni standard della schermata da visualizzare. Questo è chiamato proprio prima che venga mostrato il menu, ogni volta che viene mostrato. È possibile utilizzare questo metodo per abilitare/disabilitare in modo efficiente gli elementi o modificare in modo dinamico il contenuto.

@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); 
} 

Si prega di notare due punti

1- Se possibile solo attivare o disattivare la voce di menu o sembra possibile nel vostro caso può cambiare il titolo del stesso menu funzionerà perché menu.clear(); potrebbe essere necessario più di attenzione durante la manipolazione

2- secondo link fornito da Atlos

Su 2.3.x Android e inferiore, chiama il sistema onPrepareOptionsMenu() ogni volta che l'utente apre il menu delle opzioni (presses the Menu button).

Su Android 3.0 e versioni successive, il menu delle opzioni viene considerato sempre aperto quando le voci di menu sono visualizzate nella barra delle azioni. Quando si verifica un evento e si desidera eseguire un aggiornamento del menu, you must call invalidateOptionsMenu() per richiedere che la chiamata di sistema suPrepareOptionsMenu().