2013-10-07 2 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(); 
    } 
} 

, но когда я включаю телефон в сторону, я получаю NullPointer исключение в ряду:

 dialog.show(); 

в onRestoreInstanceState, как будто он больше не распознает диалог?

+1

И я думал, что никто больше не использует 'Dialog' ... Просто используйте' DialogFragment' правильно, и все будет управляться для вас, т.е. оно останется открытым при изменении ориентации и т. Д. Обратитесь к http://developer.android.com/reference /android/app/DialogFragment.html и http://android-developers.blogspot.com/2012/05/using-dialogfragments.html –

+0

Используйте Activity.showDialog() или DialogFragment – hjy

ответ

1

Вы хотите иметь dialogShown = outState.getBoolean("dialogShown") Ключевым параметром для getBoolean() может быть любая строка, это не имя переменной.

Стилистически, Bundle следует называть inState в onRestoreInstanceState().

Далее, посмотрите на DialogFragments, это одна из проблем, которые они должны решить.

-1

Определить андроид: configChanges = "keyboardHidden | ориентация" в вашем AndroidManifest для этой активности.

+0

и как насчет описанных операций, следует Я удаляю/настраиваю их, выполнив это? –

+0

, используя это, прямо сейчас мой диалог остается открытым, но мой собственный ландшафтный макет xml не отображается, а мой вертикальный макет просто растягивается вместо этого? –

+0

? Можете ли вы мне помочь –

1

Вы можете попробовать поместить:

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

перед:

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

в onRestoreInstanceState().

Смежные вопросы