ログインダイアログを呼び出すオプションメニューを(同じアクティビティ内から)再描画しようとしています。
これがセットアップです。アプリ内の任意のアクティビティから、ユーザーはオーバーフロー/オプションメニューをクリックしてログインをクリックできます。ダイアログがポップアップし、うまくいけば正常にログインできます。次に、ダイアログはfinish()になります。メニューをクリックしても、「ログアウト」ではなく「ログイン」と表示されます。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();
}
}
トーストを使って、「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;
}