4

ログインダイアログを呼び出すオプションメニューを(同じアクティビティ内から)再描画しようとしています。

これがセットアップです。アプリ内の任意のアクティビティから、ユーザーはオーバーフロー/オプションメニューをクリックしてログインをクリックできます。ダイアログがポップアップし、うまくいけば正常にログインできます。次に、ダイアログは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;
}
4

2 に答える 2

4

私はこれを詳しく見ていきます:http://developer.android.com/guide/topics/ui/menus.html#ChangingTheMenu

invalidateOptionsMenu()Android 3.0 以降で呼び出すと、 が呼び出されますonPrepareOptionsMenu()。AMenuがそのメソッドに渡され、そのオブジェクトを使用して、メニュー項目の追加または削除にかかわらず、メニューに変更を加えたいとします。

については、次の点に注意してくださいonPrepareOptionsMenu()

メニューを表示するには true を返す必要があります。false を返すと表示されません。

編集:申し訳ありませんが、コードの一番下を見逃していました。これをすぐに確認させてください。

edit2: 電話するのを忘れていますsuper.onPrepareOptionsMenu(menu);

edit3: メニューが機能することを確認したので、メニューが表示されない唯一の原因はLoggedStatus. 適切に変更されていることを確認することで、すべてが解決するはずです。

于 2012-08-13T21:32:14.737 に答える
-2

@KickingLettuce

MenuItemタイプにキャストします。Androidは、「setVisible」が適用可能かどうか、または「Rules」変数を呼び出すことができるかどうかを判断できません。

MenuItemルール=(MenuItem)menu.findItem(R.id.Rules);

それはうまくいくでしょう。それが役に立てば幸い :)

于 2012-12-12T02:41:31.263 に答える