Как программно изменить значок элемента меню? - PullRequest
0 голосов
/ 11 апреля 2019

Мне нужно изменить значок моего меню в зависимости от условия, однако, когда я использую Menu.getItem (index) .setIcon (), он вообще не меняет мой значок. Мне нужна помощь, как это сделать, пожалуйста

Menu.getItem (индекс) .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));

1 Ответ

0 голосов
/ 11 апреля 2019

Ваш код выглядит правильно, но, возможно, вы используете его только один раз внутри 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).

...