Ваш код выглядит правильно, но, возможно, вы используете его только один раз внутри 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));
Надеемся, что это сделаем!
PS Убедитесь, что вы получаете правильный предмет при выполнении menu.getItem(2)
(пункт 2 на самом деле третий, потому что отсчет начинается с 0).Чтобы не получить неправильный элемент, было бы неплохо установить элемент, который вы хотите изменить, с помощью идентификатора, а затем заменить menu.getItem(2)
на menu.findItem(R.id.your_item_id)
.