【问题标题】:Android: Can't toggle MenuItem iconAndroid:无法切换 MenuItem 图标
【发布时间】:2015-03-17 18:00:27
【问题描述】:

我正在尝试更改菜单项图标,但该图标没有被更改。

这是我如何找到 MenuItem(工作正常):

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu items for use in the action bar
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.activity_location_actions, menu);
    mActionLocation = menu.findItem(R.id.action_location);
    return super.onCreateOptionsMenu(menu);
}

方法UpdateIcon:我截取了一张截图,以便您可以看到(在红框中)系统已找到图像。

mActionLocation 是一个 MenuItem,它在调用此方法之前被初始化并且不为空。

有人有想法吗?


更新(@vinitius 帮助解决)

UpdateIcon 方法:

private void UpdateIcon(boolean locationOn) {
    mActionLocation = locationOn; // mActionLocation is a global boolean
    invalidateOptionsMenu();
}

onPrepareOptionsMenu 覆盖:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    // Toggle location icon
    if (mActionLocation) {
        menu.findItem(R.id.action_location).setIcon(R.drawable.ic_location_on_white_24dp);
    } else {
        menu.findItem(R.id.action_location).setIcon(R.drawable.ic_location_off_white_24dp);
    }
    return super.onPrepareOptionsMenu(menu);
}

【问题讨论】:

  • 很好的答案。谢谢

标签: android menuitem


【解决方案1】:

你需要使用onPrepareOptionsMenu(Menu menu):

在每次显示菜单之前调用此方法。您可以使用此方法有效地启用/禁用项目或以其他方式动态修改内容。

在此方法中,像在onCreateOtionsMenu 中一样检索您的项目,并检查您的 gps 是否在 os 中以修改您的项目图标。

【讨论】:

  • 切换此图标的依据不是 GPS 是打开还是关闭,而是位置跟踪是打开还是关闭。很抱歉造成误解(我会更新截图)。这就是为什么我必须根据一些地图事件从活动中的几个地方切换这个图标。请问还有什么想法吗?
  • @Ambran 只需在活动的任何部分执行您需要执行的操作,然后致电InvalidateOptionsMenu()。它将导致您的菜单重绘,然后检查onPrepareOPtionsMenu() 中的任何特殊条件以相应地修改您的项目。
  • 对不起,它不起作用。我在UpdateIcon 方法的if/else 子句之后添加了invalidateOptionsMenu()。我可以看到它被击中并且setIcon 语句被击中,但没有任何反应。我在这里错过了什么?
  • 您必须在onPrepareOptionsMenu() 方法中设置图标。你在做吗?
  • 就是这样。非常感谢您的帮助:-)
猜你喜欢
  • 2010-10-08
  • 2016-03-02
  • 2016-01-07
  • 1970-01-01
  • 2015-07-26
  • 1970-01-01
  • 1970-01-01
  • 2021-01-25
  • 2020-09-10
相关资源
最近更新 更多