tutorial studio implement how fragments example ejemplo container android android-layout android-fragments

android - studio - Error al inflar el fragmento de clase



how to implement fragments in android studio (30)

Obtengo 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 retrato y el modo paisaje. 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 modo paisaje y retrato todo funciona bien. Pero cuando hago clic en mi fragmento (y puedo ver mi fragmento) y luego cambio al otro modo, obtengo el error. ¿Alguna idea de cómo puedo resolverlo? Encontré algunas respuestas aquí, pero ninguna de ellas 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


Los fragmentos no pueden anidarse en XML

Aprendí esto por las malas: si anillas una etiqueta XML basada en el diseño <fragment> dentro de un <fragment> (potencialmente) cargado dinámicamente desde FragmentManager , entonces comienzas a obtener errores extraños, tratando de inflar tu fragmento xml.

Resulta que esto no es compatible, funcionará bien si lo haces a través del enfoque de FragmentManager .

Estaba obteniendo este problema porque estaba intentando cargar un fragmento dentro de un <DrawerLayout> desde xml, y esto estaba causando un bloqueo en el método onCreateView() cuando onCreateView() la pila de respaldo.


¿Podría publicar los métodos onCreate y onCreateView del fragmento? Tuve exactamente la misma excepción que fue causada por una excepción en el fragmento en el método de onCreate , cuando arreglé ese problema, arreglé el error inflando el fragmento de clase.


Asegúrate de que tu Activity amplíe FragmentActivity .


Asegúrate de que tu Actividad amplíe FragmentActivity o AppCompatActivity


Asegúrese de que no haya excepción en el método onCreateView del fragmento. Si se produce alguna excepción en este método, Logcat no mostrará los detalles exactos de la excepción, sino que siempre muestra el mensaje:

Caused by: java.lang.ClassNotFoundException: Didn''t find class "android.view.fragment" on path: DexPathList[[zip file "/data/app/com.package/base.apk"], nativeLibraryDirectories=[/data/app/com.package/lib/arm64, /vendor/lib64, /system/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)


Como dijo Hdemirchian, asegúrate de usar:

import android.support.v4.app.Fragment;

Y también asegúrese de que la Actividad que está utilizando el fragmento (s) extiende FragmentActivity lugar de la Activity regular,

import android.support.v4.app.FragmentActivity;

para obtener la clase FragmentActivity .


Compruebe la ruta de clase, este podría ser el inflator de la vista que no pudo encontrar la definición de su clase como se define en su clase xml = "de.androidbuch.activiti.task.TaskDetailsFragment" la ruta anterior podría estar equivocada.


En mi caso,

... android.view.InflateException: Binary XML file line #24: Error inflating class fragment ... Caused by: java.lang.InstantiationException: class *.HomeFragment has no zero argument constructor ...

Después de que agregué el constructor vacío, está resuelto.

public HomeFragment() {}


En su archivo xml solo use una etiqueta en vez de la etiqueta. El inflador intenta crear un fragmento android.app.Fragment del que fallará en API <10. Por lo tanto, debe crear un grupo de vista de un tipo diferente.


Estaba teniendo el mismo problema al que te 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:

import android.app.Fragment;

a:

import android.support.v4.app.Fragment;


Has probado:

<fragment android:name="de.androidbuch.activiti.task.TaskDetailsFragment" android:layout_width="fill_parent" android:layout_height="fill_parent" />


La excepción android.view.InflateException: Binary XML file line: #... Error inflating class fragment Puede getActivity() android.view.InflateException: Binary XML file line: #... Error inflating class fragment si manipula con getActivity() dentro de su fragmento antes de onActivityCreated() . En tal caso, recibe una referencia de actividad incorrecta y no puede confiar en eso.

Por ejemplo, el siguiente patrón es incorrecto:

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View view = inflater.inflate(R.layout..., container, false); Button button = getActivity().findViewById(R.id...); button.setOnClickListener(...); - another problem: button is null return view; }

Correcto patrón # 1

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View view = inflater.inflate(R.layout..., container, false); Button button = view.findViewById(R.id...); button.setOnClickListener(...); return view; }

Corregir el patrón n. ° 2

@Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); Button button = getActivity().findViewById(R.id...); button.setOnClickListener(...); }


Mi problema en este caso era una simple instancia de tener una excepción de puntero nulo en uno de mis métodos que se invocaba más adelante en el ciclo de vida. Esto estaba causando la excepción "Error al inflar el fragmento de clase". En resumen, recuerde comprobar más abajo en el seguimiento de la pila de excepciones para encontrar una posible causa.

Una vez que resolví la excepción del puntero nulo, mi fragmento se cargó bien.


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:

06-19 16:20:37.885: E/AndroidRuntime(23973): Caused by: java.lang.RuntimeException: API key not found. Check that /meta-data/ android:name="com.google.android.maps.v2.API_KEY" android:value="your API key"/ is in the application element of AndroidManifest.xml.

¡Hice esto y mi código estaba funcionando!

<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyCl1yGPZ3mpxxxxxxxAz2R-t7zcWVzrHUL9k"/> </application>


Obtuve el mismo error, pero mi problema era que mi fragmento no tenía una identificación en el diseño xml de la actividad principal.



Para mí fue después de desplazarme en el seguimiento de la pila encontré que faltaba el permiso para android.permission.ACCESS_NETWORK_STATE

después de agregar este permiso fue reparado


Recibí este error en el estudio de Android. El problema era que mi fragmento tenía una distribución relativa, mientras que el código en la función OnCreateView era

mDrawerListView = (ListView) inflater.inflate( R.layout.fragment_navigation_drawer, container, false);

es tu código haciendo lo mismo?


Recibí este error por diferentes razones.

Pasos para reproducir:

~> Mi problema fue que creé una nueva aplicación en blanco.

~> Luego generé un fragmento personalizado desde el Archivo ~> Menú Nuevo Archivo.

~> Procedió a personalizar el fragmento añadiendo diseños y botones, etc.

~> Hace referencia al nuevo fragmento personalizado en el activity_my.xml generado automáticamente que se generó para mí al crear la aplicación. Hacer esto permitió que XML generara los objetos para mí.

Aquí está la trampa cuando se genera el fragmento personalizado a través de Archivo ~> Menú Nuevo Archivo, genera automáticamente un stub 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 lo hace, el error anterior solo se produce al hacer referencia al fragmento de xml. Al eliminar por completo la referencia del Fragmento en el XML y al 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 quejándose de la interfaz. Esto se demuestra en el Proyecto Plantilla Actividad + Fragmento. Aunque, <~ esa plantilla de proyecto no genera el stub de la interfaz.


Si desea heredar AppCompatActivity , puede hacer algo como esto: en la actividad xml, use un FrameLayout como este-

<FrameLayout android:id="@+id/result_fragment" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/progress_frame"/>

y en la actividad onCreate -

final FragmentManager supportFragmentManager = getSupportFragmentManager(); FragmentTransaction ft = supportFragmentManager.beginTransaction(); ft.replace(R.id.result_fragment, fphResultActivityFragment, "result fragment"); ft.commitAllowingStateLoss();


Si está agregando Fragment estáticamente, es decir, en xml, entonces puede haber perdido para implementar OnFragmentInteractionListener en su clase Activity . Entonces la implementación de la interfaz resolvería el problema. Si agrega Fragment dinámicamente, es decir, en clase java, esta no es la solución. Porque IDE en sí no le permitirá continuar sin implementar las interfaces requeridas.


Si su TaskDetailsFragment extiende android.app.Fragment , cambie en onCreateView() .

Devuelva la vista que desea mostrar en el Fragmento o convierta su Diseño para ver utilizando LayoutInflater y devolverlo.

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View mainview = inflater.inflate(R.layout.main, null); return mainview; }

Espero que esto funcione. :)


Si su fragmento es un Fragmento de lista, la actividad que utiliza ese fragmento debe implementar la interfaz onFragmentInteraction .


Si tiene archivos de diseño separados para los modos vertical y horizontal y está recibiendo un error de inflación cada vez que cambia de orientación después de hacer clic en un elemento, es muy probable que haya una discrepancia entre los archivos de diseño.

Cuando obtiene el error, ¿es solo cuando hace clic en el elemento en modo horizontal o solo en modo vertical o en ambos? ¿Tu actividad TaskDetailsFragment utiliza un archivo de diseño que podría tener discrepancias entre los modos horizontal y vertical?


Solo tuve el mismo error. La razón por la mía fue la visibilidad de mi clase de fragmento. Se configuró por defecto, debería ser público.


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 en Project->Properties . android-support-v4.jar bibliotecas relacionadas con Google Maps como android-support-v4.jar y google-play-services.jar ; sin embargo, me faltaba incluirlos en la ''Build class path'' en el menú de opciones ''Order and Export'' . Tal vez el error yace aquí.

Intente incluir bibliotecas en la ruta de la clase de compilación.

El orden en que se crean las clases también puede desencadenar el error, por lo que mi consejo es intentar reorganizar el orden de la ruta del edificio. 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.


Tuve un problema similar; Después de ejecutar el ejemplo de AdMob , traté de insertar anuncios en mi aplicación, lo que generó este error:

01-02 16:48:51.269 8199-8199/it.dndc.BreathPlot E/AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.IllegalStateException: Could not execute method of the activity Caused by: android.view.InflateException: Binary XML file line #57: Error inflating class fragment

La solución es: no puede insertar el fragmento de un anuncio en una actividad de lista. En cambio, podría agregarlo a una FragmentActivity y a una ActionBarActivity sin ningún problema.

Mi sugerencia es: comenzar con el ejemplo de AdMob y agregarle la aplicación existente: ¡habría ahorrado mucho tiempo!


Yo tenía el mismo error. Estaba cavando todo el día, no sé, pero creo que intenté ~ 25 soluciones a este problema. Ninguno funcionó hasta que a las 2 AM descubrí que me faltaba esta línea en el manifiesto de aplicaciones xml:

<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" />

Esa línea estaba dentro de la etiqueta <application> . Realmente espero que esto ayude a alguien. GL.


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:

super.onCreate(savedInstanceState); setContentView(R.layout.fc_activity_list_profiles);


asegúrate de haber usado este

<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyBEwmfL0GaZmdVqdTxxxxxxxx-rVgvY" />

no esta..

<meta-data android:name="com.google.android.gms.version" android:value="AIzaSyBEwmfL0GaZmdVqdTCvxxxxxxx-rVgvY" />