gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:40:12 26 4
gpt4 key购买 nike

我想在运行时切换 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com