我试图让我的选项菜单重绘(在同一个活动中)我称之为登录对话框。
这是设置。从应用程序中的任何活动,用户可以单击溢出/选项菜单,然后单击登录。弹出一个对话框,希望他们能够成功登录。然后对话框结束()。如果你点击菜单它仍然显示“登录” - 而不是“注销”。看来我没有使用invalidateOptionsMenu吧?这是代码:
选项菜单代码从中调用对话框:
case R.id.Login:
Intent i = new Intent(this, Login.class);
startActivityForResult(i, 0);
return true;
Login.class是一个对话框。当用户单击对话框中的提交按钮时,会发生以下情况:
// set log in var's here
Intent in = new Intent();
setResult(1, in);
finish();
然后回到原始活动:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == 1) {
MyActivity.this.invalidateOptionsMenu();
}
}
使用Toast,我确认正在调用“1”。
如何使菜单无效并重新绘制,以便它包含注销选项(因为用户现在已登录?)
编辑:
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
MenuItem Rules = menu.findItem(R.id.Rules);
MenuItem About = menu.findItem(R.id.About);
MenuItem Profile = menu.findItem(R.id.Profile);
MenuItem Login = menu.findItem(R.id.Login);
MenuItem Logout = menu.findItem(R.id.Logout);
// set the menu options depending on login status
if (LoggedStatus == true) {
// show the log out option
Logout.setVisible(true);
Login.setVisible(false);
Rules.setVisible(true);
Profile.setVisible(true);
About.setVisible(true);
} else {
// show the log in option
Logout.setVisible(false);
Login.setVisible(true);
Rules.setVisible(true);
Profile.setVisible(false); // hide
About.setVisible(true);
}
return true;
}
答案 0 :(得分:4)
我会仔细研究一下:http://developer.android.com/guide/topics/ui/menus.html#ChangingTheMenu
在Android 3.0及上拨打invalidateOptionsMenu()
会致电onPrepareOptionsMenu()
。 Menu
传递给该方法,您希望使用该对象对菜单进行更改,无论是添加还是删除菜单项。
请牢记onPrepareOptionsMenu()
:
您必须返回true才能显示菜单;如果你返回false,它将不会显示。
编辑:对不起,我在最底层错过了你的代码。让我快速检查一下。
edit2:您忘记致电super.onPrepareOptionsMenu(menu);
edit3:现在你确定菜单确实有效,唯一可能导致它不显示的是LoggedStatus
。确保正确修改它应解决所有问题。
答案 1 :(得分:-2)
@KickingLettuce
将其转换为MenuItem类型。 Android无法确定是否" setVisible"适用于或可以调用"规则"变量
MenuItem Rules =(MenuItem)menu.findItem(R.id.Rules);
这将有效。希望它有所帮助:)