如何在同一个活动中重新加载菜单android?

Fab*_*oro 8 android android-menu

我的应用程序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;
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Dhe*_*ngh 39

使用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);
}
Run Code Online (Sandbox Code Playgroud)

请注意两点

1-如果可能只是启用或禁用菜单项或看起来可能在你的情况下可以更改同一菜单的标题将起作用,因为menu.clear(); 处理时可能需要过度注意

2-根据Atlos提供的链接

在Android 2.3.x及更低版本中,每次用户打开选项菜单(presses the Menu button)时,系统都会调用onPrepareOptionsMenu().

在Android 3.0及更高版本中,当操作栏中显示菜单项时,选项菜单被视为始终打开.当事件发生并且您想要执行菜单更新时,you must call invalidateOptionsMenu()请求系统调用onPrepareOptionsMenu().


tre*_*r-e 7

以下是相关链接:http://developer.android.com/guide/topics/ui/menus.html#ChangingTheMenu

这取决于您所定位的Android版本.不确定你是否已阅读此部分,但我有任何其他建议将逐字逐句.