java - 如何访问 onPrepareOptionsMenu 中的 "Up"按钮并在运行时切换其可见性

标签 java android android-actionbar android-navigation

我想在运行时切换 ActionBar 上“向上”按钮(左箭头)的可见性。我尝试使用项目 id R.id.home 访问 onPrepareOptionsMenu 中的按钮,因为此 id 在 onOptionsItemSelected 中工作,但是我不断收到 IndexOutOfBoundsException 对于 Activity 创建时 onPrepareOptionsMenu 中的特定行。 “向上”按钮的正确项目 ID 是什么?或者是否有更好的方法在运行时切换“向上”按钮?

这是我的代码:

public boolean onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    MenuItem up = menu.getItem(R.id.home);
    if (phase != Phase.IDLE) {  // this is the runtime situation in which I want to disable the Up navigation
        up.setVisible(false);
    } else {
        up.setVisible(true);
    }

    return true;
}

我也尝试过android.R.id.home,得到了同样的错误。

最佳答案

我通过 Android 文档找到了解决方案,并认为最好将其发布回此处。尽管其他答案都没有完全有效地切换“向上”按钮(至少在我正在使用的平台上),但其中一些(和评论)非常有帮助,特别是在指出我使用 ActionBar.setDisplayHomeAsUpEnabled() 时。 。然而,这里的关键是调用 invalidateOptionsMenu() 强制重新绘制菜单。

引用documentation :

On Android 3.0 and higher, the options menu is considered to always be open when menu items are presented in the app bar. When an event occurs and you want to perform a menu update, you must call invalidateOptionsMenu() to request that the system call onPrepareOptionsMenu().

所以我的最终解决方案是:

  • 存储ActionBar作为实例变量(感谢@rupinderjeet);
  • 调用 setDisplayHomeAsUpEnabled()关于ActionBar每当我想切换向上按钮时;
  • 调用 invalidateOptionsMenu()每次调用setDisplayHomeAsUpEnabled()后立即.

关于java - 如何访问 onPrepareOptionsMenu 中的 "Up"按钮并在运行时切换其可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48636097/

相关文章:

java - 尝试使用 Hudson 运行 Selenium 测试 - "Error: no display specified"

java - Maven war 插件无法排除爆炸 war 格式的库

Nexus 5 不支持 Android 相机 API SCENE_MODE_HDR?

android - 监控非信标 BLE 设备(Android 信标库)

android - 在上下文操作栏的溢出菜单中显示图标

java - 如何正确使用 Lombok @Data 和接口(interface)

java - 多线程时我需要多少个处理程序

java - 用 subview 网格填充屏幕,但 subview 的大小是预期大小的一半

android - ActionBar/ActionBarSherlock 中的自定义图像而不是 Logo

android - 从 SettingActivity 返回到主 Activity