我的工具栏中有一个菜单,该菜单包含两个子菜单(登录,注销)。 当我按下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;
}
问题在于子菜单列表以任何一种方式打开。
有没有办法关闭菜单(或阻止其打开)?
谢谢!
答案 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;
}
尽管我尚未在系统上进行测试,请检查此解决方案。