如何以编程方式更改“菜单项”图标?

问题描述 投票:0回答:1

我需要根据条件更改菜单图标,但是当我使用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));
java android menu icons options
1个回答
0
投票

你的代码看起来是正确的,但也许你只是在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)

© www.soinside.com 2019 - 2024. All rights reserved.