9

アプリのアンドロイドにメニューがあります。[お気に入りの追加] をクリックすると、メニュー オプションをリロードする必要があります。これにより、オプションにお気に入りが表示され、[お気に入りの追加] が表示されなくなります。

戻るボタンがあるため、リロード アクティビティを使用したくありません。

私のコード:

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

ありがとう!

4

2 に答える 2

40

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

2点ご注意ください

1-可能な場合は、メニュー項目を有効または無効にするか、場合によっては同じメニューのタイトルを変更できるように見える可能性があるため、menu.clear(); 取り扱いには注意が必要かもしれません

2- Atlos が提供するリンクによる

Android 2.3.x 以前では、ユーザーがオプション メニュー ( ) を開くたびに、システムが onPrepareOptionsMenu() を呼び出しますpresses the Menu button

Android 3.0 以降では、アクション バーにメニュー項目が表示されている場合、オプション メニューは常に開いていると見なされます。イベントが発生し、メニューの更新を実行したい場合you must call invalidateOptionsMenu()、システムが onPrepareOptionsMenu() を呼び出すように要求します。

于 2012-06-25T18:04:24.563 に答える
7

関連リンクは次のとおりです。http://developer.android.com/guide/topics/ui/menus.html#ChangingTheMenu

ターゲットにしている Android のバージョンによって異なります。この部分をまだ読んだかどうかはわかりませんが、私が持っているその他のアドバイスは、この言葉のままです。

于 2012-06-25T18:04:54.863 に答える