2012-06-25 6 views
8

Ich habe ein Menü in meiner App Android. Wenn ich auf Favoriten hinzufügen klicke, muss ich die Menüoptionen neu laden, damit sie in den Optionen als Favoriten erscheinen und nicht als Favoriten erscheinen.Wie man Menü Android in der gleichen Aktivität neu laden?

Ich möchte nicht neu laden Aktivität wegen der Zurück-Taste verwenden.

Mein Code:

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

Dank!

Antwort

36

Verwendung onPrepareOptionsMenu

der Standard-Optionen-Menü-Bildschirm vorbereitet angezeigt werden. Dies wird direkt vor der Anzeige des Menüs aufgerufen, jedes Mal wenn es angezeigt wird. Sie können diese Methode verwenden, um Elemente effizient zu aktivieren/deaktivieren oder den Inhalt anderweitig dynamisch zu ändern.

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

Bitte beachten Sie zwei Punkte

1- Wenn möglich nur aktivieren oder deaktivieren Sie den Menüpunkt oder sieht möglich in Ihrem Fall kann den Titel des gleichen Menü ändern, weil menu.clear funktioniert(); kann über die Aufmerksamkeit benötigen, während

2- per Link von Atlos bereitgestellt Handhabung

Auf Android 2.3.x und niedriger, ruft das System onPrepareOptionsMenu() jedes Mal, wenn der Benutzer das Optionsmenü öffnet (presses the Menu button).

Unter Android 3.0 und höher gilt das Optionsmenü immer als geöffnet, wenn in der Aktionsleiste Menüelemente angezeigt werden. Wenn ein Ereignis auftritt und Sie eine Menüaktualisierung durchführen möchten, fordern Sie you must call invalidateOptionsMenu() an, dass das System onPrepareOptionsMenu() aufruft.

Verwandte Themen