首页 > 解决方案 > 以编程方式关闭工具栏菜单

问题描述

我的工具栏中有一个菜单,其中有两个子菜单(登录、注销)。当我按下菜单图标并且用户未登录时,我希望它立即打开另一个活动。当用户登录时,它应该打开子菜单列表。

<?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:app="http://schemas.android.com/apk/res-auto"
          android:id="@+id/fieldChooserMenu">

        <item android:id="@+id/userButton"
              android:title="@string/userButton"
              android:icon="@drawable/ic_person_outline_black_24dp"
              app:showAsAction="always">

           <menu>
                <item android:id="@+id/changeUser" android:title="Login"/>
                <item android:id="@+id/logOutUser" android:title="Log out"/>
           </menu>
        </item>
    </menu>

以下是 onOptionsItemselected 中应执行的操作的示例:

public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.userButton) {
            if (userIsLoggedIn()) {
                //Opens other options (Change User && Logout User)
            } else {
                openUserManagementActivity();
            }
        } else if (item.getItemId() == R.id.changeUser) {
            openUserManagementActivity();
        } else if (item.getItemId() == R.id.logOutUser) {
            logoutUser(this);
        }
        return true;
    }

问题是子菜单列表以任何一种方式打开。

有没有办法关闭菜单(或阻止它打开)?

提前致谢!

标签: javaandroid

解决方案


您可以禁用菜单项 - https://stackoverflow.com/a/5441329/6413387

@Override
public boolean onPrepareOptionsMenu (Menu menu) {
    if (isFinalized) {
        menu.getItem(1).setEnabled(false);
        // You can also use something like:
        // menu.findItem(R.id.example_foobar).setEnabled(false);
    }
    return true;
}

推荐阅读