No se puede realizar esta acción después de onSaveInstanceState – DialogFragment

He overriden el onSavedInstanceState y quitado el súper, no estoy haciendo ninguna transacción, mucho menos transacciones en funciones volátiles o async.

Lo llamo en una devolución de llamada personalizada 'onUserExistsListener'

@Override public Boolean userExists(Boolean exists) { if (exists) { } else { AlertDialogFragment Frag = AlertDialogFragment.newInstance(0, null); Frag.show(getSupportFragmentManager(), "warndialog"); } }; 

¿Han intentado todo lo sugerido en las otras preguntas de SO y todavía no encontraron ninguna solución? ¿Nadie?

código:

 AlertDialogFragment Frag = AlertDialogFragment.newInstance(0, null); Frag.show(getSupportFragmentManager(), "warndialog"); 

El proceso:

OnCreate: (función LoadNames)

LoadNames Callback -> Mostrar diálogo.

Promover:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); add_name_to_db(); } 

función:

 public void add_name_to_db() { Details.checkNameExists(user_txt.getText().toString()); Details.setOnUserExistsListener(new onUserExistsListener() { @Override public Boolean userExists(Boolean exists) { if (exists) { } else { runOnUiThread(new Runnable() { @Override public void run() { AlertDialogFragment Frag = AlertDialogFragment.newInstance(0, null); Frag.show(getSupportFragmentManager(), "warndialog"); } }); } } else { Toast.makeText(getApplicationContext(), "This is not a valid KIK username", Toast.LENGTH_SHORT).show(); } return exists; } }); } 

Llamando a Frag.show(getSupportFragmentManager(), "warndialog"); , De hecho está realizando una transacción fragmentada (ver show () ).

Si se ha llamado el método onSaveInstanceState () de la actividad, se lanzará una IllegalStateException cuando intente mostrar el diálogo. Debe cambiar el código para asegurarse de que cuando muestre el fragmento de diálogo, lo haga después de restaurar el estado de actividad (es decir, onPostResume ()). Vea esta entrada del blog para más información.

También puede comprometer la transacción permitiendo la pérdida del estado;

EDIT: Debe llamar a la super.onCreate (SavedInstanceState) en onCreate (). Simplemente no funcionará sin él.


OnSaveInstanceState () se produce cuando la actividad está terminando. Es demasiado tarde para parar y mostrar la interfaz de usuario.

¿Cuándo desea que se ejecute este código? ¿Cuando el botón de la parte posterior es presionado quizá?

Ponga su código en onBackPressed () para eso.

Android: forma correcta de utilizar onBackPressed () con Toast

EDITAR Si desea que el código se ejecute al inicio de una actividad, como menciona en otro comentario. No utilice onSaveInstanceState (). Pon tu código en onCreate () o onResume ().

Dependiendo de cómo está funcionando su devolución de llamada, es posible que deba ejecutar esas líneas de código en el subproceso de interfaz de usuario, como esto:

 runOnUiThread(new Runnable() { public void run() { AlertDialogFragment Frag = AlertDialogFragment.newInstance(0, null); Frag.show(getSupportFragmentManager(), "warndialog"); } }); 
  • No se pueden retener fragmentos anidados
  • Fragmentos, cuando estoy "activo"?
  • TabLayout ViewPager no carga al utilizar Backstack
  • Android - Fragmentos del cajón de navegación
  • Android cómo mostrar DatePicker en Fragmento?
  • Haciendo referencia a fragmentos invisibles en ViewPager
  • No puede resolver el método add (int, new tFragment ()). Commit () en android studion 1.0.1
  • Actualizar el fragmento ListView cuando no está enfocado
  • FragmentPagerAdapter - cómo detectar un golpe o un clic de pestaña cuando el usuario va a una nueva pestaña?
  • Indexación de aplicaciones para aplicaciones con una sola actividad principal
  • Ocultar el teclado EditTexts en Fragmentos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.