2013-10-07 63 views
0

說我打開了一個對話框,並將手機側身。我想讓對話保持開放。 我該如何實現這個目標?如何保留對話框的打開狀態onRestoreInstanceState

這是我已經試過

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,就像它不再識別對話框一樣?

+1

我認爲沒有人再使用'Dialog' ...只需正確使用DialogFragment'',一切都將爲您管理,即它將保持打開方向更改等。請參閱http://developer.android.com/reference /android/app/DialogFragment.html and http://android-developers.blogspot.com/2012/05/using-dialogfragments.html –

+0

使用Activity.showDialog()或DialogFragment – hjy

回答

1

您想擁有dialogShown = outState.getBoolean("dialogShown")getBoolean()的關鍵參數可以是任何字符串,它不是變量名稱。

在風格上,Bundle應該在onRestoreInstanceState()中調用狀態。

此外,看看DialogFragments,這是他們應該解決的問題之一。

-1

在您的AndroidManifest中爲該活動定義android:configChanges =「keyboardHidden | orientation」。

+0

以及前面提到的操作應該如何在執行此操作後,我將它們移除/調整了它們? –

+0

使用此,現在我的對話框仍然打開,但我的自定義橫向佈局xml沒有顯示,我的垂直佈局只是被拉伸而已? –

+0

?你能幫我嗎 –

1

你可以嘗試把:

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

前:

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

相關問題