2012-06-25 11 views
8

私はアプリのアンドロイドにメニューを持っています。お気に入りをクリックすると、メニューオプションがリロードされ、オプションでdelお気に入りとして表示され、お気に入りを追加して表示されなくなります。同じアクティビティでメニューアンドロイドをリロードする方法は?

戻るボタンのために再読み込みアクティビティを使用したくないです。

マイコード:

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

ありがとう!

答えて

36

使用onPrepareOptionsMenu

スクリーンの標準オプションメニューが表示されるように準備します。これは、メニューが表示される直前に、呼び出されるたびに呼び出されます。この方法を使用すると、アイテムを有効にしたり無効にしたり、コンテンツを動的に変更したりすることができます。

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

二点

1-(ちょうどmenu.clearので動作する同じメニューのタイトルを変更することができます有効または無効にメニュー項目や、あなたのケースで可能になります可能であれば)を注意してください。アンドロイド2.3.x以降と下部にAtlos

によって提供されるリンクの通り

2-の処理中に注意上必要があるかもしれない、システムは、ユーザがオプションメニュー(presses the Menu button)を開くたびにonPrepareOptionsMenu()を呼び出します。

Android 3.0以上では、メニュー項目がアクションバーに表示されているときに、オプションメニューが常に開いているとみなされます。イベントが発生し、メニュー更新を実行する場合は、you must call invalidateOptionsMenu()を呼び出してシステムコールonPrepareOptionsMenu()を要求します。それはあなたがターゲットとしているのAndroidのバージョンによって異なりhttp://developer.android.com/guide/topics/ui/menus.html#ChangingTheMenu

:ここ

7

は、関連するリンクです。あなたがまだこの部分を読んでいるかどうかは分かりませんが、私が持っている他のアドバイスはこれをそのまま言います。

関連する問題