StackOverflowError al intentar inflar un diseño personalizado para un AlertDialog dentro de un DialogFragment

Estoy intentando crear un AlertDialog, usando el constructor y fijando una visión de encargo. Cuando intento inflar la vista dentro de onCreateDialog, consigo un StackOverflowError ..

Aquí está el código hasta el punto donde vuelve a lo largo de onCreateDialog:

@Override public Dialog onCreateDialog(Bundle savedInstanceState){ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setTitle(R.string.enter_time); LinearLayout outerLayout = (LinearLayout) getLayoutInflater(savedInstanceState) .inflate(R.layout.time_entry_dialog, null); ... } 

Y aquí está la salida LogCat:

 02-28 22:30:04.220: E/AndroidRuntime(4250): FATAL EXCEPTION: main 02-28 22:30:04.220: E/AndroidRuntime(4250): java.lang.StackOverflowError 02-28 22:30:04.220: E/AndroidRuntime(4250): at android.app.Activity.getSystemService(Activity.java:4009) 02-28 22:30:04.220: E/AndroidRuntime(4250): at android.view.LayoutInflater.from(LayoutInflater.java:210) 02-28 22:30:04.220: E/AndroidRuntime(4250): at android.view.ContextThemeWrapper.getSystemService(ContextThemeWrapper.java:75) 02-28 22:30:04.220: E/AndroidRuntime(4250): at com.android.internal.app.AlertController$AlertParams.<init>(AlertController.java:812) 02-28 22:30:04.220: E/AndroidRuntime(4250): at android.app.AlertDialog$Builder.<init>(AlertDialog.java:374) 02-28 22:30:04.220: E/AndroidRuntime(4250): at android.app.AlertDialog$Builder.<init>(AlertDialog.java:359) 02-28 22:30:04.220: E/AndroidRuntime(4250): at com.sweatyreptile.chee.runtimetracker.TimeEntryDialogFragment.onCreateDialog(TimeEntryDialogFragment.java:18) 02-28 22:30:04.220: E/AndroidRuntime(4250): at android.support.v4.app.DialogFragment.getLayoutInflater(DialogFragment.java:295) 02-28 22:30:04.220: E/AndroidRuntime(4250): at com.sweatyreptile.chee.runtimetracker.TimeEntryDialogFragment.onCreateDialog(TimeEntryDialogFragment.java:21) 02-28 22:30:04.220: E/AndroidRuntime(4250): at android.support.v4.app.DialogFragment.getLayoutInflater(DialogFragment.java:295) 02-28 22:30:04.220: E/AndroidRuntime(4250): at com.sweatyreptile.chee.runtimetracker.TimeEntryDialogFragment.onCreateDialog(TimeEntryDialogFragment.java:21) 02-28 22:30:04.220: E/AndroidRuntime(4250): at android.support.v4.app.DialogFragment.getLayoutInflater(DialogFragment.java:295) ...etc 

EDIT: encontré esta línea en el origen de DialogFragment.getLayoutInflater () :

 mDialog = onCreateDialog(savedInstanceState); 

Así que .. si no puedo obtener un LayoutInflator dentro de onCreateDialog sin causar recursión infinita, ¿cómo hincho una vista para un AlertDialog personalizado?

Si encontró el problema. DialogFragment.getLayoutInflater () contiene una llamada a onCreateDialog() , por lo que llamar a onCreateDialog() desde dentro getLayoutInflater() crea un bucle infinito.

He encontrado la solución en esta respuesta: https://stackoverflow.com/a/10585164/2020340

No estoy exactamente seguro de si esta es una buena forma, porque realmente no parece, pero he reemplazado

 getLayoutInflater(savedInstanceState) 

con

 getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
  • ¿Qué es android.R.layout.simple_list_item_1?
  • Problema al asignar una instancia de calendario a otra
  • Cree una biblioteca de Jar Android para su distribución
  • ¿Es importante la versión de JDK que utilizo en Android Studio?
  • ¿Es incorrecto ejecutar runnable.run ()?
  • Utilizar interfaces para constantes de espacio de nombres en Android
  • OutputStream.write () éxito pero los datos no se entregan
  • XML vinculante herramientas para Android
  • Slider en la aplicación para Android
  • NullPointerException mientras se envía StringArray usando Parcelable
  • Agregar array como una propiedad en la entidad greenDAO
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.