我需要根据条件更改菜单图标,但是当我使用Menu.getItem(index).setIcon()时,它根本不会更改图标。我需要帮助,该怎么做
Menu.getItem(index).setIcon()
if (menu != null) {
if (observedCount != 0)
menu.getItem(2).setIcon(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_delete_copy));
else
menu.getItem(2).setIcon(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_cart));
答案 0 :(得分:0)
您的代码看起来正确,但是也许您只是在onCreateOptionsMenu()
内部使用了一次代码,却错过了在observedCount
更新时更新图标所需的调用。
您可以在活动中尝试执行以下操作:
首先,覆盖onPrepareOptionsMenu()
并在此处应用更改:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if (observedCount != 0)
menu.getItem(2).setIcon(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_delete_copy));
else
menu.getItem(2).setIcon(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_cart));
return super.onPrepareOptionsMenu(menu);
}
然后,每当您想要更新图标时(即observedCount
更改时),只需调用:
invalidateOptionsMenu(); // From a fragment, call activity.invalidateOptionsMenu();
另一种选择是在onCreateOptionsMenu()
中保存对菜单的引用:
private Menu mMenu;
...
@Override
public void onCreateOptionsMenu(Menu menu)
{
getMenuInflater().inflate(R.menu.your_menu, menu);
mMenu = menu;
}
然后,您可以使用该引用来设置图标:
if (observedCount != 0)
mMenu.getItem(2).setIcon(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_delete_copy));
else
mMenu.getItem(2).setIcon(ContextCompat.getDrawable(MainActivity.this, R.drawable.ic_cart));
那应该可以做到!
P.S。 确保在进行menu.getItem(2)
时获得正确的商品(商品编号2实际上是第三个,因为计数从0开始)。为了避免弄错项目,最好将要更改的项目设置为ID,然后将menu.getItem(2)
替换为menu.findItem(R.id.your_item_id)
。