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();
    }
}

但是当我侧身转动手机时,我在行上得到一个空指针异常:

        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")Key 参数getBoolean()可以是任何字符串,它不是变量名。

从风格上讲,Bundle应该在 中调用 inState onRestoreInstanceState()

此外,调查一下DialogFragments,这是他们应该解决的问题之一。

于 2013-10-09T12:24:51.977 回答
-1

在您的 AndroidManifest 中为该活动定义 android:configChanges="keyboardHidden|orientation"。

于 2013-10-07T11:28:00.453 回答