java - 如何强制触发 onPrepareOptionsMenu 方法?

标签 java android android-menu

在我的 Activity 的 onCreateOptionsMenu 方法中,我只是扩展我的菜单布局文件并附加它。

我想根据全局变量的值 a 显示/隐藏一些菜单项,我在 onPrepareOptionsMenu 方法中执行此操作。我读到这是执行此操作的正确位置。

我的 onPrepareOptionsMenu 方法并不总是触发。我不知道为什么,但当我按下手机上的“菜单”按钮时,它并不总是触发。也许它与它的内部状态有关。

它似乎在创建 Acitvity 时触发。第一次按下“菜单”按钮不会触发它,但如果我第二次按下菜单按钮,它就可以正常工作。

有什么方法可以强制 onPrepareOptionsMenu 触发。

谢谢


Smok 建议使用 invalidateOptionsMenu 方法使菜单项无效,但这会导致 onCreateOptionsMenu 方法也被触发。这是我的方法:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    System.out.println("onCreate");

    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.search, menu);

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
    SearchView searchView = (SearchView) menu.findItem(R.id.search).getActionView();
    searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
    searchView.setIconified(false);
    searchView.requestFocusFromTouch();

    return true;

}

@Override
public boolean onPrepareOptionsMenu (Menu menu) {
    System.out.println("prepared");

    if (this.objAdapter == null) {
        menu.findItem(R.id.sort).setVisible(false);
        menu.findItem(R.id.filter).setVisible(false);
        menu.findItem(R.id.group).setVisible(false);
    } else {
        menu.findItem(R.id.sort).setVisible(true);
        menu.findItem(R.id.filter).setVisible(true);
        menu.findItem(R.id.group).setVisible(true);

    }

    return true;
}

正如您从我的 onCreateOptionsMenu 方法中看到的那样,再次调用它会导致焦点丢失到 SearchView

最佳答案

正如 Smok 所指出的:通过调用 invalidateOptionsMenu()

关于java - 如何强制触发 onPrepareOptionsMenu 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12405825/

相关文章:

java - 解析一个文件中的多个 JSON 对象

java - spring http-basic

android - InputConnectionWrapper 警告

android - Apktool 检索项目 : No resource found that matches the given name '@android:style/Animation.OptionsPanel' 的父项时出错

android - 通过 XML 为 Android 矢量菜单图标着色

Java 游戏、弹跳和 Action

javascript - 自动填写WebView android中的字段

android - 像菜单项一样的路径 - Android

Android 水平滚动菜单(如谷歌位置)

java - 通过 VPN 连接到网络时,Spring Boot 应用程序不会加入 Coherence 集群