0

ダイアログを開いて、携帯電話を横向きにしたとします。そのダイアログを開いたままにしておきたい。どうすればそれを達成できますか?

これが私が試したことです

Dialog dialog;
boolean dialogShown = false;

onClick:
   dialog = new Dialog(Login.this, R.style.no_title_dialog);
   dialog.show();
   dialogShown = true;

   dialogButton.onClick:
        //doStuff
        dialog.dismiss();
        dialogShown = false;

その後

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    if(dialogShown) {
        outState.putBoolean("dialogShown", true);
    }
}

@Override
protected void onRestoreInstanceState(Bundle outState) {
    super.onRestoreInstanceState(outState);
    outState.getBoolean("dialogShown");
    if(dialogShown){
        dialog.show();
    }
}

しかし、電話を横向きにすると、行に nullpointer Exception が発生します。

        dialog.show();

onRestoreInstanceState で、ダイアログが認識されなくなったように?

4

3 に答える 3

1

あなたは入れてみることができます:

if(dialog == null) {
    dialog = new Dialog(Login.this, R.style.no_title_dialog);
}

前:

if(dialogShown){
    dialog.show();
}

onRestoreInstanceState()

于 2013-10-09T12:17:53.320 に答える
1

あなたがしたいdialogShown = outState.getBoolean("dialogShown")キーパラメータgetBoolean()は、変数名ではなく、任意の文字列にすることができます。

スタイル的には、Bundleは inState で呼び出される必要がありますonRestoreInstanceState()

さらに、 を調べてくださいDialogFragments。これは、彼らが解決すべき問題の 1 つです。

于 2013-10-09T12:24:51.977 に答える
-1

そのアクティビティの AndroidManifest で android:configChanges="keyboardHidden|orientation" を定義します。

于 2013-10-07T11:28:00.453 に答える