Me sale el error
Unable to start activity ComponentInfo{de.androidbuch.activiti/de.androidbuch.activiti.task.Activity}: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
cuando cambio a través del modo vertical y horizontal. Estoy usando fragmentos Mi xml es:
<LinearLayout android:id="@+id/mainLayout"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
<ListView android:id="@+id/android:list"
android:layout_height="wrap_content"
android:layout_width="fill_parent"/>
<fragment android:id="@+id/fragmentDetails"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
class="de.androidbuch.activiti.task.TaskDetailsFragment"/>
</LinearLayout>
Si cambio a través del modo horizontal y vertical, todo funciona bien. Pero cuando hago clic en mi fragmento (y puedo ver mi fragmento) y luego cambio al otro modo, aparece el error. ¿Alguna idea de cómo puedo resolverlo? Encontré algunas respuestas aquí, pero ninguna de estas me ayudó ...
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): FATAL EXCEPTION: main
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): java.lang.RuntimeException: Unable to start activity
ComponentInfo{de.androidbuch.activiti/de.androidbuch.activiti.task.Activity}: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1736)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1752)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.app.ActivityThread.handleRelaunchActivity(ActivityThread.java:3097)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.app.ActivityThread.access$1600(ActivityThread.java:123)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:997)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.os.Handler.dispatchMessage(Handler.java:99)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.os.Looper.loop(Looper.java:126)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.app.ActivityThread.main(ActivityThread.java:3998)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at java.lang.reflect.Method.invokeNative(Native Method)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at java.lang.reflect.Method.invoke(Method.java:491)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at dalvik.system.NativeStart.main(Native Method)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:688)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.view.LayoutInflater.rInflate(LayoutInflater.java:724)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.view.LayoutInflater.rInflate(LayoutInflater.java:727)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.view.LayoutInflater.inflate(LayoutInflater.java:479)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.view.LayoutInflater.inflate(LayoutInflater.java:391)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.view.LayoutInflater.inflate(LayoutInflater.java:347)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:227)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.app.Activity.setContentView(Activity.java:1771)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at de.androidbuch.activiti.task.TaskActivity.onCreate(TaskActivity.java:83)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1700)
06-21 14:55:05.600: ERROR/AndroidRuntime(7636): ... 12 more
Respuestas:
Como dijo hdemirchian, asegúrese de usar:
Y también asegúrate de que la Actividad que usa los fragmentos se extienda en
FragmentActivity
lugar de la regularActivity
,para obtener la
FragmentActivity
clasefuente
La excepción
android.view.InflateException: Binary XML file line: #... Error inflating class fragment
podría suceder si manipulasgetActivity()
dentro de tu fragmento antes de queonActivityCreated()
te llamen. En tal caso, recibe una referencia de actividad incorrecta y no puede confiar en eso.Por ejemplo, el siguiente patrón es incorrecto:
Corregir patrón # 1
Corregir patrón # 2
fuente
getActivity()
dentroonActivityCreated()
o en cualquier método de ciclo de vida posterior, pero antesonDestroyView()
.Asegúrese de que se
Activity
extiendaFragmentActivity
.fuente
Yo tenía el mismo error. Estuve cavando todo el día, no sé, pero creo que probé ~ 25 soluciones para este problema. Ninguno funcionó hasta que a las 2 a.m. descubrí que me faltaba esta línea en el manifiesto de aplicaciones xml:
Esa línea estaba dentro de la
<application>
etiqueta. Realmente espero que esto ayude a alguien. GL.fuente
Yo tuve el mismo problema. La solución para mí fue el orden de super.onCreate y setContentView dentro de FragmentActivity
El siguiente orden funciona bien:
fuente
super
siempre se debe llamar al comienzo del método.super.method()
debe llamar primero. Depende de lo que haga el método de la superclase. En el caso deFragmentActivity
que haga algo de inicialización necesaria para quesetContentView
funcione correctamente. Sin embargo, en otro método (por ejemploonKeyUp
), es posible que desee realizar un trabajo condicional con la acción, pero recurrirsuper.onKeyUp
en ese caso, es muy probable que desee llamarsuper.onKeyUp
al final de la función.super()
(el constructor de la superclase) debe ser la primera función llamada en cualquier constructor de clases secundarias, sin embargo, llamarlo no es necesariamente obligatorio (dependería completamente de la clase que se extienda).Los fragmentos no se pueden anidar en XML
Aprendí esto de la manera difícil: si anida una
<fragment>
etiqueta basada en el diseño XML dentro de un fragmento (potencialmente) cargado dinámicamenteFragmentManager
, entonces comienza a obtener errores extraños, tratando de inflar su fragmento xml.Resulta que esto no es compatible; funcionará bien si lo hace solo con el
FragmentManager
enfoque.Estaba teniendo este problema porque estaba intentando cargar un fragmento dentro de un
<DrawerLayout>
archivo xml, y esto estaba causando un bloqueo en elonCreateView()
método cuando abrí la pila trasera.fuente
appcompat-v7:23.3.0
<fragment>
con<frameLayout>
trabajado. Todavía lo estoy descubriendo. - stackoverflow.com/a/19167009/5477548Estaba teniendo el mismo problema que tú enfrentas. Ninguno de los consejos en la parte superior me ayudó. Más tarde, descubrí que todo lo que tenía que hacer era arreglar mis importaciones desde:
a:
fuente
Has probado:
fuente
Asegúrese de que no haya ninguna excepción generada en el método onCreateView del fragmento. Si se genera alguna excepción en este método, logcat no mostrará los detalles exactos de la excepción, sino que siempre mostrará el mensaje:
fuente
Si se está
TaskDetailsFragment
extendiendoandroid.app.Fragment
, cambieonCreateView()
.Devuelva su vista que desea mostrar en el Fragmento o convierta su Diseño para ver usando LayoutInflater y devuélvala.
Espero que esto funcione. :)
fuente
Verifique su ruta de clase, esta podría ser la vista que el inflador no pudo encontrar su definición de clase como se define en su clase xml = "de.androidbuch.activiti.task.TaskDetailsFragment" la ruta anterior podría estar equivocada.
fuente
Estaba recibiendo este error por diferentes razones.
Pasos para reproducir:
~> Mi problema fue que creé una nueva aplicación en blanco.
~> Luego generé un fragmento personalizado del Archivo ~> Nuevo menú de archivo.
~> Se procedió a personalizar el fragmento agregando diseños y botones, etc.
~> Hice referencia al nuevo fragmento personalizado en la actividad_mx.xml generada automáticamente que se generó para mí al crear la aplicación. Hacer esto permitió que el XML generara los objetos por mí.
Aquí está el truco al generar el fragmento personalizado a través de Archivo ~> Nuevo menú de archivo, genera automáticamente un código auxiliar de función de interfaz y lo coloca en la parte inferior del archivo de clase de fragmento.
Esto significa que su clase MyActivity debe implementar esta interfaz. Si no es así, el error anterior se produce solo cuando se hace referencia al fragmento de xml. Al eliminar completamente la referencia para el Fragmento en el XML y crear el fragmento a través del código en el archivo de clase MyActivity.java, Logcat genera un error más conciso que explica el problema en detalle y se queja de la interfaz. Esto se demuestra en la Actividad de plantilla de proyecto + Fragmento. Aunque, <~ esa plantilla de proyecto no genera el stub de interfaz.
fuente
Para mí fue después de desplazarme en el seguimiento de la pila que encontré que me falta el permiso para android.permission.ACCESS_NETWORK_STATE
después de agregar este permiso se solucionó
fuente
Si tiene archivos de diseño separados para los modos vertical y horizontal y obtiene un error de inflado cada vez que cambia la orientación después de hacer clic en un elemento, lo más probable es que haya una discrepancia entre sus archivos de diseño.
Cuando recibe el error, ¿es solo cuando hace clic en el elemento en modo horizontal o solo en modo vertical o ambos? ¿Su actividad TaskDetailsFragment utiliza un archivo de diseño que podría tener discrepancias entre los modos horizontal y vertical?
fuente
Si está agregando
Fragment
estáticamente, es decir, en xml, es posible que no haya implementadoOnFragmentInteractionListener
en suActivity
clase. Entonces la implementación de la interfaz resolvería el problema. Si está agregandoFragment
dinámicamente, es decir, en la clase java, entonces esta no es la solución. Porque IDE en sí mismo no le permitirá continuar sin implementar las interfaces requeridas.fuente
Mi problema en este caso fue una simple instancia de tener una excepción de puntero nulo tonto en uno de mis métodos que se invocó más adelante en el ciclo de vida. Esto me estaba causando la excepción "Error al inflar el fragmento de clase". En resumen, recuerde verificar más abajo en el seguimiento de la pila de excepciones por una posible causa.
Una vez que resolví la excepción de puntero nulo, mi fragmento se cargó bien.
fuente
Ninguna de las soluciones mencionadas anteriormente me ayudó. En el registro pude encontrar el detalle de la excepción como se menciona a continuación:
¡Hice esto y mi código estaba funcionando!
fuente
Si no quieres cambiar nada e ir con la etiqueta " fragmento "
hacer esto,
fuente
Tenía el mismo tipo de error, donde se mostraba exactamente el mismo mensaje de error en logcat. Necesitaba hacer cambios en la ruta de compilación de Java ubicada debajo
Project->Properties
. Había incluido bibliotecas relacionadas con Google Maps comoandroid-support-v4.jar
ygoogle-play-services.jar
; Sin embargo, me faltaba incluirlos'Build class path'
en el'Order and Export'
menú de opciones. Quizás el error yace aquí.Intente incluir bibliotecas en la ruta de clase de compilación.
El orden en el que se crean las clases también puede desencadenar el error, por lo que mi consejo también es tratar de reorganizar el orden de la ruta de construcción. El error desapareció cuando utilicé el siguiente orden:
'my_project_name/src'->'my_project_name/gen'->'Android Private Libraries'
. La última unidad contiene los archivos jar mencionados anteriormente.fuente
En su archivo xml simplemente use un en lugar de la etiqueta. El inflador intenta crear un android.app.Fragment desde el cual fallará en API <10. Por lo tanto, debe crear un grupo de vista de un tipo diferente.
fuente
Obtuve este error al usar un ListFragment pero la identificación de la vista de lista era listView1 en lugar de list.
'Su contenido debe tener un ListView cuyo atributo de identificación sea' android.R.id.list ''
http://developer.android.com/reference/android/app/ListFragment.html
fuente
asegúrate de haber usado este
no esta..
fuente
Acabo de tener este mismo error. La razón de la mía fue la visibilidad de mi clase de fragmentos. Se estableció en predeterminado, debe ser público.
fuente
¿Podría publicar los fragmentos
onCreate
yonCreateView
métodos? Tuve exactamente la misma excepción causada por una excepción en elonCreate
método del fragmento , cuando solucioné ese problema, solucionó el error al inflar el fragmento de clase.fuente
Estaba recibiendo este error en Android Studio, el problema era que mi fragmento tenía un diseño relativo mientras que el código de la función OnCreateView era
¿Tu código está haciendo lo mismo?
fuente
Si desea heredar AppCompatActivity , puede hacer algo como esto: en la actividad xml, use un FrameLayout como este:
y en la actividad
onCreate
-fuente
Obtuve el mismo error, pero mi problema fue que mi fragmento no tenía una identificación en el diseño xml de la actividad principal.
fuente
Después de un día de lucha, encontré alguna comprobación de escenario, es posible que estés enfrentando lo mismo,
Nota: no agregue dos claves en el archivo de manifiesto, elimine la clave del mapa
código anterior y agregue este código.
fuente
Tuve un problema similar; después de ejecutar el ejemplo de AdMob , intenté insertar anuncios en mi aplicación, lo que provocó este error:
La solución es: no puede insertar el fragmento de un anuncio en ListActivity. En cambio, podría agregarlo a un FragmentActivity y a un ActionBarActivity sin ningún problema.
Mi sugerencia es: comience desde el ejemplo de AdMob y agregue en él su aplicación existente: ¡Hubiera ahorrado mucho tiempo!
fuente
Si utiliza la ofuscación con el componente de navegación, debe excluir el fragmento de Android y sus argumentos. Agregue estas líneas a sus archivos de reglas de protección:
fuente