DialogFragment en Fragmento con rotación de pantalla

En mi actividad principal tengo un Fragmento en el que aplico setRetainInstance (true) para que el AsyncTask que uso en él no se altere por el cambio de orientación.

Mucho trabajo es procesado por el AsyncTask. Es por eso que me gustaría mostrar un diálogo con una barra de progreso en la parte superior de mi actividad.

Hice algunas investigaciones y logré hacerlo con DialogFragment:

Public class DialogWait extends DialogFragment {

private ProgressBar progressBar; public DialogWait() { } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.dialog_wait, container); Dialog dialog = getDialog(); dialog.setTitle("Hello"); setCancelable(false); progressBar = (ProgressBar) view.findViewById(R.id.progress); return view; } public void updateProgress(int value) { progressBar.setProgress(value); } 

Y aquí está mi AsyncTask:

 public class InitAsyncTask extends AsyncTask<Void, Integer, Void> { private Context activity; private OnTaskDoneListener mCallback; private DialogWait dialog; public InitAsyncTask(Context context, OnTaskDoneListener callback, DialogWait dialogWait) { activity = context; mCallback = callback; dialog = dialogWait; } @Override protected Void doInBackground(Void... params) { doStuff(); return null; } @Override protected void onProgressUpdate(Integer... values) { dialog.updateProgress(values[0]); } @Override protected void onPostExecute(Void result) { publishProgress(100); if(dialog != null) dialog.dismiss(); mCallback.onTaskDone(); } private void doStuff() { //... } 

}

Si no cambio la rotación de la pantalla, funciona bien. Pero si lo hago, el diálogo se descarta y unos segundos más tarde, tengo una NullPointerEsception que absurdo desde que establezco la condición: if (dialog! = Null)

¿Qué estoy haciendo mal?

Solución encontrada!

No estaba haciendo lo correcto con el Fragmento que contiene mi AsyncTask.

Porque, realmente no he entendido el concepto de orientación en Fragmento, lo entiendo gracias a este enlace: http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html

onDestroyView métodos onDestroyView y onDestroyView en su DialogWait siguiente manera:

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); } @Override public void onDestroyView() { if (getDialog() != null && getRetainInstance()) { getDialog().setDismissMessage(null); } super.onDestroyView(); } 
  • Rotar diseño de trama que contiene botones dinámicos
  • Rotar correctamente las imágenes web utilizando Picasso de Square
  • Después de girar una línea lineal, los eventos onclick no cambian de posición después de la rotación
  • ¿Rotar imágenes alrededor de un círculo?
  • Android: obtiene la orientación del dispositivo desde Azimuth, roll y pitch
  • Imagen fuera de límites después de la transformación en la vista
  • ¿Por qué querría alguna vez `setRetainInstance (false)`? - O - La forma correcta de manejar la rotación del dispositivo
  • La aplicación que utiliza libgdx se reinicia siempre que el dispositivo gira
  • Android gire TextView en nivel de API> = 8
  • Animación giratoria androide
  • Saber cuándo se ha terminado la rotación usando setRequestedOrientation
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.