DialogFragment trava Activity ao chamar startActivity ()
eu tenho umDialogFragment
que deveria ser simples, mas está me dando alguns grandes problemas especificamente no Jelly Bean.
O aplicativo usa a rede e aparece um diálogo pedindo ao usuário para ativar o WiFi ou cancelá-lo, fechando-o. Então isso se estendeDialogFragment
e cria a vista como:
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog a = new AlertDialog.Builder(getActivity()).setCancelable(true).setTitle(R.string.dialog_title_disabled)
.setMessage(R.string.dialog_text)
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dismiss();
Intent i = new Intent(Settings.ACTION_WIRELESS_SETTINGS);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
}
}).setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
getActivity().finish();
}
}).create();
//a.setCanceledOnTouchOutside(false);
return a;
}
Se o usuário clicar em Sim, ele descartará o diálogo e abrirá a atividade de configurações sem fio. Ou se o usuário clicar em Cancelar, apenas fecha toda a minha atividade, mas no Jelly Bean, sempre que eu clico em Sim, ele abre as Configurações, mas a força do aplicativo é fechada com o seguinte erro:
08-05 20:24:22.584: E/AndroidRuntime(2579): java.lang.IllegalStateException: Failure saving state: active SettingsDialogFragment{425dd550} has cleared index: -1
08-05 20:24:22.584: E/AndroidRuntime(2579): at android.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1653)
Há algum log extra mostrando o estado salvo de cada fragmento que estava no meu layout e o número 2 que deveria ser oSettingsDialogFragment
é apenas umnull
:
08-05 20:24:22.576: E/FragmentManager(2579): #2: null
Eu tentei não descartar o diálogo, mas ele caiu do mesmo jeito.
Eu realmente não tenho certeza do que está acontecendo aqui ... Alguma idéia?
EDITAR:O código de atividade (é uma atividade normal porque o aplicativo segmenta para o ICS e para cima):
private void showDialog() {
SettingsDialogFragment diag = (SettingsDialogFragment) getFragmentManager().findFragmentByTag(DIALOG_TAG);
if (diag == null) {
diag = new SettingsDialogFragment();
diag.show(getFragmentManager(), DIALOG_TAG);
} else {
if (!diag.isVisible())
diag.show(getFragmentManager(), DIALOG_TAG);
}
}
private void dismissDialog() {
SettingsDialogFragment diag = (SettingsDialogFragment) getFragmentManager().findFragmentByTag(DIALOG_TAG);
if (diag != null)
diag.dismiss();
}