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:
- Appium no puede obtener datos de atributo "content-desc"
- Cómo convertir una hora de GMT a EST
- Bloquear / desbloquear una aplicación de mi aplicación: Android
- SQLiteAssetHelper: No se pudo abrir la base de datos para escribir (intentará leer sólo)
- Barra de progreso personalizada para android
@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?
- Java.lang.OutOfMemoryError Una aplicación de cámara
- Escaneo de código QR desde un archivo de imagen
- ¿Cómo prevenir el retraso de la interfaz de usuario al actualizar la notificación al descargar el archivo?
- Java Static Variable se convierte en nulo
- Error: El constructor MainActivity.ScreenSlidePagerAdapter (FragmentManager) no está definido
- La caché de dependencias de Android Gradle puede estar dañada y la compilación de gradle no funciona
- Sólo algunos usuarios informan del error "Recurso no encontrado". ¿Esto tiene sentido?
- Eclipse utiliza la variable PATH antigua para ejecutar el proceso de línea de comandos en la tarea Gradle?
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);
- ¿Cómo comprobar si el texto dado es inglés o chino en android?
- Creación de una carpeta en la memoria interna para guardar archivos y recuperarlos más tarde