Tengo un DialogFragment
que se suponía que era simple, pero me está dando algunos grandes problemas específicamente en Jelly Bean.DialogFragment bloquea la actividad al llamar a startActivity()
La aplicación utiliza la red y aparece un diálogo que le pide al usuario que active el WiFi o lo cancele y luego lo cierra. Por lo tanto, se extiende y crea DialogFragment
Ver 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;
}
Si el usuario hace clic en Sí, se descarta el diálogo y abre la actividad de configuración inalámbrica. O si el usuario hace clic Cancelar simplemente cierra toda mi actividad, pero en Jelly Bean, en cualquier momento que haga clic en Sí, lo hace abrir los ajustes, pero la fuerza de aplicación se cierra con el siguiente error:
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)
Hay un poco de registro adicional que muestra el estado guardado de cada fragmento que estaba en mi disposición y el número 2 que se supone que es el SettingsDialogFragment
es sólo un null
:
08-05 20:24:22.576: E/FragmentManager(2579): #2: null
traté de no descartar el diálogo, pero se estrelló la misma manera.
No estoy seguro de qué está pasando aquí ... ¿Alguna idea?
EDIT:
el código de actividad (que es una actividad normal debido a que la aplicación está destinada a ICS en adelante):
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();
}
¿Podría poner todo el código relevante en una PasteBin? El error también podría estar en su 'FragmentActivity'. – tolgap
@tolgap Tengo dos métodos simples en mi actividad, los acabo de incluir en la publicación. La actividad llama a uno u otro en devoluciones de llamada desde el API y dimisses OnPause() – Budius
Interesante, uno más de esos fragmentos no comprensibles IllegalStateExceptions ... Pensé que ya había visto todo. – Ixx