0

I have a menu in my toolbar which has two submenus (Login, Log out). When i press on the menuicon and the user is not logged in i want it to open another activity immediately. When the User is logged in it should open the submenu-list.

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

Here is an example of what should be done in 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;
    }

The problem is that the submenu list is opened either way.

Is there a way to close the menu (or keep it from opening)?

Thanks in advance!

Winter
  • 5
  • 2

2 Answers2

0

You can disable the menu item - 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;
}
towhid
  • 2,778
  • 5
  • 18
  • 28
0

You can modify your code below code:

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

Please check this solution although I have not tested on my system.

Ashish Karn
  • 1,127
  • 1
  • 9
  • 20