我正在尝试在同一个活动中让我的选项菜单重新绘制,以便调用登录对话框。
以下是设置。用户可以从应用程序的任何活动中,单击溢出/选项菜单,然后单击登录。然后会弹出一个对话框,他们可以希望成功登录。然后,对话框完成 ()。如果您单击菜单,它仍然显示“登录”而不是“注销”。似乎我没有正确使用 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;
}
onPrepareOptionsMenu()
代码吗?我没有看到你发布的代码中有任何明显的问题。也许在调用super.onActivityResult(..)
之前,可以将结果检查放置在onActivityResult(..)
中? - Alex Curran