gpt4 book ai didi

android - 如何在同一 Activity 中重新加载菜单android?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:46:31 25 4
gpt4 key购买 nike

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

我不想因为后退按钮而使用重新加载 Activity 。

我的代码:

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

谢谢!

最佳答案

使用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()。

在 Android 3.0 及更高版本上,当菜单项出现在操作栏中时,选项菜单被视为始终打开。当事件发生并且您想要执行菜单更新时,您必须调用 invalidateOptionsMenu() 以请求系统调用 onPrepareOptionsMenu()。

关于android - 如何在同一 Activity 中重新加载菜单android?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11194707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com