您的代码看起来是正确的,但也许您只在 onCreateOptionsMenu() 中使用过一次,并且错过了将图标更新为 observedCount 更新所需的调用。
方法 1
您可以尝试在活动中执行以下操作:
首先,覆盖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();
方法2
另一种选择是在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));
希望能做到!
附: 确保在执行menu.getItem(2) 时获得正确的项目(项目编号 2 实际上是第三个,因为计数从 0 开始)。为避免获取错误的项目,最好将要更改的项目设置为 ID,然后将 menu.getItem(2) 替换为 menu.findItem(R.id.your_item_id)。