9

我的应用程序 android 中有一个菜单。当我单击添加收藏夹时,我需要重新加载菜单选项,使其在选项中显示为收藏夹而不显示添加收藏夹。

由于后退按钮,我不想使用重新加载活动。

我的代码:

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

请注意两点

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 回答