以编程方式关闭工具栏菜单

时间:2020-07-07 08:37:56

标签: java android

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

<?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;
    }

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

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

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以禁用菜单项-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;
}

答案 1 :(得分:0)

您可以在代码下方修改您的代码:

private Menu menuList;//Class level variable

@Override
public boolean onCreateOptionsMenu(Menu menu) {
   getMenuInflater().inflate(R.menu.fieldChooserMenu, menu);
   menuList = menu;//help to create reference menu object
   return true;
}

public boolean onOptionsItemSelected(MenuItem item) {
        menuList.findItem(R.id.changeUser).setVisible(false);
        menuList.findItem(R.id.logOutUser).setVisible(false);
        if (item.getItemId() == R.id.userButton) {
            if (userIsLoggedIn()) {
                //Opens other options (Change User && Logout User)
                //set default as not visible or setVisible(false) as default case.
                menuList.findItem(R.id.changeUser).setVisible(true);//or false
                menuList.findItem(R.id.logOutUser).setVisible(true);//or false
            } else {
                openUserManagementActivity();
            }
        } else if (item.getItemId() == R.id.changeUser) {
            openUserManagementActivity();
        } else if (item.getItemId() == R.id.logOutUser) {
            logoutUser(this);
        }
        return true;
    }

尽管我尚未在系统上进行测试,请检查此解决方案。

相关问题