versiones pie oreo developer descargar android

oreo - android pie



android.view.InflateException: archivo XML binario: error al inflar el fragmento de clase (27)

Tengo un error muy frustrante que no puedo explicar. Android AppCompat una aplicación de Android que usa Android AppCompat para que sea compatible con versiones anteriores. Aquí está mi archivo principal de diseño de actividades:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <!-- As the main content view, the view below consumes the entire space available using match_parent in both dimensions. --> <FrameLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- android:layout_gravity="start" tells DrawerLayout to treat this as a sliding drawer on the left side for left-to-right languages and on the right side for right-to-left languages. If you''re not building against API 17 or higher, use android:layout_gravity="left" instead. --> <!-- The drawer is given a fixed width in dp and extends the full height of the container. --> <fragment android:id="@+id/navigation_drawer" android:layout_width="@dimen/navigation_drawer_width" android:layout_height="match_parent" android:layout_gravity="start" android:name="com.fragment.NavigationDrawerFragment" /> </android.support.v4.widget.DrawerLayout>

Y aquí está el código principal de mi actividad:

public class MainActivity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }

El principal problema aquí es: el código anterior se ejecuta sin problemas en casi dispositivos (dispositivos estimulados o algunos dispositivos reales). Pero cuando lo ejecuto en Samsung S3. Se da cuenta de este error:

java.lang.RuntimeException: Unable to start activity ComponentInfo{view.MainActivity}: android.view.InflateException: Binary XML file line #25: Error inflating class fragment at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2081) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2106) at android.app.ActivityThread.access$700(ActivityThread.java:134) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1217) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4856) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774) at dalvik.system.NativeStart.main(Native Method) Caused by: android.view.InflateException: Binary XML file line #25: Error inflating class fragment at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:704) at android.view.LayoutInflater.rInflate(LayoutInflater.java:746) at android.view.LayoutInflater.inflate(LayoutInflater.java:489) at android.view.LayoutInflater.inflate(LayoutInflater.java:396) at android.view.LayoutInflater.inflate(LayoutInflater.java:352) at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:316) at android.app.Activity.setContentView(Activity.java:1901) at android.support.v7.app.ActionBarActivity.superSetContentView(ActionBarActivity.java:208) at android.support.v7.app.ActionBarActivityDelegateICS.setContentView(ActionBarActivityDelegateICS.java:111) at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:76)

Por favor, dime cómo corregir el error, gracias :)


¿NavigationDrawerFragment extiende el android.support.v4.app.Fragment? En otras palabras, ¿está importando el paquete correcto?

import android.support.v4.app.Fragment;



Como se mencionó en una publicación anterior,
rebautizar

android:name="com.fragment.NavigationDrawerFragment"

a

class = "com.fragment.NavigationDrawerFragment"

Aún así, no funcionó para mí. Luego usé el nombre de la clase sin la parte de com.fragment y funcionó. Así que cámbialo finalmente a

class = "NavigationDrawerFragment"


Creo que el problema básico es con "android: targetSdkVersion" que se define en AndroidManifest.xml. En mi caso, el valor inicial que he definido como:

android:targetSdkVersion=16

Lo cambié a:

android:targetSdkVersion=22

que resolvió todo el error. Por lo tanto, configurar la "targetSdkVersion" correcta también es importante antes de crear una aplicación de Android.


Después de mucho tiempo de intentos, así es como resolví el problema después de que ninguna de las respuestas anteriores pudiera hacerlo.

  1. Extienda AppCompatActivity para su actividad Main en lugar de Activity .
  2. Agregue android:theme="@style/Theme.AppCompat.Light" a su <Activity..../> en AndroidManifest.xml
  3. En su clase NavigationDrawerFragment , cambie sus instancias de ActionBar a

    ActionBar mActionBar=((AppCompatActivity)getActivity()).getSupportActionBar();

EDITAR

Debe ser una coherencia entre la Actividad y el Diseño . Si el diseño tiene uno de los temas de AppCompat , como Theme.AppCompat.Light , su actividad debería extends AppCompatActivity .

Quería tener el ícono de la hamburguesa y un Cajón de navegación que se parece a la aplicación de Android Gmail , pero terminé con un desagradable Cajón de navegación . Todo eso porque todas mis clases extends Activity lugar de AppCompatActivity .

Volví a factorizar todo el proyecto para extender AppCompatActivity , luego clic con el AppCompatActivity derecho en la Layout Folder , elegí new -> Activity luego Navigation Drawer Activity y Boom, ¡todo está hecho para mí!


Después de mucho tiempo para la depuración, he solucionado este problema. (Aunque todavía no puedo explicar por qué). Que cambio la propiedad android:name a class . (aunque en el documento de Android, dicen que esas propiedades son las mismas, ¡pero funciona!)

Entonces, debería cambiar de:

android:name="com.fragment.NavigationDrawerFragment"

a

class = "com.fragment.NavigationDrawerFragment"

Entonces, el nuevo diseño debería ser:

<!-- As the main content view, the view below consumes the entire space available using match_parent in both dimensions. --> <FrameLayout android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" /> <!-- android:layout_gravity="start" tells DrawerLayout to treat this as a sliding drawer on the left side for left-to-right languages and on the right side for right-to-left languages. If you''re not building against API 17 or higher, use android:layout_gravity="left" instead. --> <!-- The drawer is given a fixed width in dp and extends the full height of the container. --> <fragment android:id="@+id/navigation_drawer" android:layout_width="@dimen/navigation_drawer_width" android:layout_height="match_parent" android:layout_gravity="start" class = "com.fragment.NavigationDrawerFragment" />

Espero que esto ayude :)


Después de que ninguna de las respuestas aquí me ayudó, opté por ejecutar la aplicación en modo de depuración moviéndome a través de cada línea de onCreateView en mi fragmento (NavigationDrawerFragment en su caso). Y notó que el fragmento tenía dificultades para inflarse debido a una NullPointerException. P.ej

mySeekBar = (SeekBar) getActivity().findViewById(R.id.mySeekBar); mySeekBar.setOnSeekBarChangeListener(this);

Aquí mySeekBar se estableció en nulo (porque me había olvidado de agregar el control en el diseño apropiado) y la siguiente línea llegó a NPE, que salió como InflateException. Además, como se sugirió anteriormente, cambie el nombre de Android: nombre a clase.

Este problema puede surgir por varias razones mencionadas anteriormente. Recomendaría el flujo de depuración línea por línea para saber qué está mal.


En caso de que alguien más venga aquí y las respuestas no ayuden a resolver el problema, una cosa más para probar.

Como otros han mencionado, esto generalmente es causado por un problema anidado en el XML en vez de algo que hiciste mal en tu Java. En mi caso, fue un error súper fácil (y estúpido) de arreglar.

Tenía un código como este:

<view android:layout_width="fill_parent" android:layout_height="1dip" android:id="@+id/view44" android:background="@color/gray" />

Cuando todo lo que tenía que hacer era capitalizar el v en ''Ver'' para que el sistema lo reconociera. Verifique que sus vistas personalizadas (o fragmentos, recyclerviews, etc.) tengan la declaración inicial en mayúscula adecuada para que el autocompletado de XML coincida con la vista adecuada.


En mi caso .

El diseño que estaba tratando de inflar tenía

<include layout = "...." />

etiqueta, eliminarlo lo solucionó.

Intentaba inflar un diseño anterior diseñado para un Actvity en el adaptador de visor de búsqueda.


Enfrenté este problema y lo resolví usando los siguientes códigos. Estaba comenzando la transacción de fragmento usando childfragment manager.

diseño:

<fragment class="com.google.android.youtube.player.YouTubePlayerSupportFragment" android:id="@+id/youtube_fragment" android:layout_width="match_parent" android:layout_height="wrap_content"/>

así es como comencé la transacción de fragmento:

youTubePlayerFragment = (YouTubePlayerSupportFragment) getChildFragmentManager().findFragmentById(R.id.youtube_fragment);

Los siguientes códigos explican cómo eliminé el fragmento que se agregó al usar childfragmentmanger.

@Override public void onDestroyView() { super.onDestroyView(); youTubePlayerFragment = (YouTubePlayerSupportFragment) getChildFragmentManager().findFragmentById(R.id.youtube_fragment); if (youTubePlayerFragment != null) { getChildFragmentManager().beginTransaction().remove(youTubePlayerFragment).commitAllowingStateLoss(); } youTubePlayer = null; }


Estaba teniendo el mismo problema, en mi caso el nombre del paquete era incorrecto, arreglarlo resolvió el problema.


Este problema surge cuando tiene una clase personalizada que amplía una clase diferente (en este caso, una vista) y no importa todos los constructores requeridos por la clase.

Por ejemplo: public class CustomTextView extiende TextView {}

Esta clase tendría 4 constructores y si se pierde una, se bloqueará. De hecho, me perdí el último que fue utilizado por Lollipop, que añadió ese constructor y funcionó bien.


He tenido problemas similares de vez en cuando. El mensaje de error a menudo proporciona muy pocos detalles, independientemente de la causa real. Pero encontré una forma de obtener información más útil. Resulta que la clase interna de Android ''LayoutInflater.java'' (en el paquete android.view) tiene un método ''inflar'' que relanza una excepción, pero no recoge los detalles, por lo que se pierde información sobre la causa.

Utilicé AndroidStudio y establecí un punto de interrupción en LayoutInflator línea 539 (en la versión en la que estoy trabajando), que es la primera línea del bloque catch para una excepción genérica en ese método ''inflate'':

} catch (Exception e) { InflateException ex = new InflateException( parser.getPositionDescription() + ": " + e.getMessage()); ex.initCause(e); throw ex;

Si miras ''e'' en el depurador, verás un campo de ''causa''. Puede ser muy útil para darle una pista sobre lo que realmente ocurrió. Así es como, por ejemplo, descubrí que el padre de un fragmento incluido debe tener una identificación, incluso si no se usa en tu código. O que un TextView tenía un problema con una dimensión.


Llego un poco tarde a la fiesta, pero ninguna de estas respuestas me ayudó en mi caso. Estaba usando el mapa de Google como SupportMapFragment y PlaceAutocompleteFragment en mi fragmento. Como todas las respuestas apuntaban al hecho de que el problema es que SupportMapFragment es el mapa que se debe recrear y volver a dibujar.

Pero también tuve un problema con PlaceAutocompleteFragment. Así que aquí está la solución de trabajo para aquellos que enfrentan este problema debido a SupportMapFragment y SupportMapFragment

mapFragment = (SupportMapFragment) getChildFragmentManager().findFragmentById(R.id.mapFragment); FragmentManager fm = getChildFragmentManager(); if (mapFragment == null) { mapFragment = SupportMapFragment.newInstance(); fm.beginTransaction().replace(R.id.mapFragment, mapFragment).commit(); fm.executePendingTransactions(); } mapFragment.getMapAsync(this); //Global PlaceAutocompleteFragment autocompleteFragment; if (autocompleteFragment == null) { autocompleteFragment = (PlaceAutocompleteFragment) getActivity().getFragmentManager().findFragmentById(R.id.place_autoCompleteFragment); }

Y en onDestroyView borre SupportMapFragment y SupportMapFragment

@Override public void onDestroyView() { super.onDestroyView(); if (getActivity() != null) { Log.e("res","place dlted"); android.app.FragmentManager fragmentManager = getActivity().getFragmentManager(); android.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); fragmentTransaction.remove(autocompleteFragment); fragmentTransaction.commit(); autocompleteFragment = null; } }


Mi error fue causado por un problema diferente.

Estaba pasando un paquete de una actividad a su fragmento. Cuando comenté el código que recibía el paquete en el fragmento, el error desapareció. Como resultado, mi error se debió a la siguiente "getArguments ();" parte que devolvía nulo.

Bundle args = getArguments();

Al verificar el código de envío de la actividad, me di cuenta de que había cometido un error en el siguiente;

Bundle bundle =new Bundle(); bundle.putInt("recipeID", recipe_position); Fragment mainFragment = new MainActivityFragment(); mainFragment.setArguments(bundle); FragmentManager fragmentManager = getSupportFragmentManager(); --> fragmentManager.beginTransaction() .replace(R.id.container, new MainActivityFragment(), DetailRecipeActivityFragment.TAG) .commit();

Estaba creando un NUEVO fragmento en la línea con la flecha. Mientras que debería haber usado el fragmento previamente instanciado que ya tenía mi paquete. Entonces debería haber sido:

Bundle bundle =new Bundle(); bundle.putInt("recipeID", recipe_position); Fragment mainFragment = new MainActivityFragment(); mainFragment.setArguments(bundle); Fragment mainFragment = new MainActivityFragment(); FragmentManager fragmentManager = getSupportFragmentManager(); -->fragmentManager.beginTransaction() .replace(R.id.container, mainFragment, DetailRecipeActivityFragment.TAG) .commit();

No sé exactamente por qué arroja este error en lugar de un NPE, pero esto solucionó mi error en caso de que alguien tenga el mismo escenario


No pude resolver mi problema utilizando las respuestas proporcionadas. Finalmente cambié esto:

<fragment android:id="@+id/fragment_food_image_gallery" android:name="ir.smartrestaurant.ui.fragment.ImageGalleryFragment" android:layout_width="match_parent" android:layout_height="200dp" android:layout="@layout/fragment_image_gallery" tools:layout="@layout/fragment_image_gallery" />

a esto :

<FrameLayout android:id="@+id/fragment_container" android:layout_width="match_parent" android:layout_height="200dp" />

,

private void showGallery() { ImageGalleryFragment fragment = new ImageGalleryFragment() getSupportFragmentManager().beginTransaction() .replace(R.id.fragment_container, fragment) .commit(); }

y funciona.
Si lo está usando dentro de un fragmento, use getChildFragmentManager en lugar de getSupportFragmentManager .


No sé si esto ayudará.

Tuve este problema con un TextView que tenía en el diseño que intentaba inflar ( android.view.InflateException: archivo XML binario línea # 45: error al inflar la clase TextView ).

Había establecido el siguiente atributo XML android: textSize = "? Android: attr / textAppearanceLarge", que no permitía inflar el diseño.

No sé exactamente por qué, ( Todavía soy un poco nuevo en Android, menos de un año de experiencia ), podría tener algo que ver con los atributos del sistema de llamadas, idk, todo lo que sé es que tan pronto como utilicé el viejo simple @ dimen / md_text_16sp ( que es una costumbre mía ), problema resuelto :)

Espero que esto ayude...


Para algunos de ustedes que todavía no han encontrado una solución para esto, en mi caso estaba sucediendo porque tenía un problema OOM (Sin memoria). Esto puede suceder cuando tienes, por ejemplo, una pérdida de memoria en tu aplicación cuando la utilizas durante mucho tiempo. En mi rastro de pila, esta fue la razón principal.


Por si alguien necesita esto. Supuestos: teléfono del dispositivo conectado a un cable USB y su lectura IDE para iniciar la aplicación. Vaya al símbolo del sistema para determinar el problema: ingrese adb logcat

A continuación, inicie su aplicación desde IDE. Tendrás una excepción.

En mi caso: estaba implementando una aplicación de Android de la Versión 2.3 a un dispositivo móvil que no admitía el widget "Espacio"


Puede que ya no sea necesario para ti, pero si otros lectores lo encuentran útil. Tengo exactamente la misma android.view.InflateException:...Error inflating class fragment . Tenía todas las bibliotecas correctas incluidas. Se solucionó agregando un permiso de usuario más en el archivo AndroidManifest.xml , es decir, <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

Por cierto, estaba ejecutando Android Studio 0.8.9 on Ubuntu 12.04.


También tuve este problema. Lo resolví reemplazando la importación en MainActivity y NavigationDrawerFragment

De

import android.app.Activity; import android.app.ActionBar;

A

import android.support.v7.app.ActionBar; import android.support.v7.app.ActionBarActivity;

MainActivity para extender ActionBarActivity lugar de Activity

public class MainActivity extends ActionBarActivity implements NavigationDrawerFragment.NavigationDrawerCallbacks

También use ActionBar actionBar = getSupportActionBar(); para obtener la ActionBar

Y actualicé la siguiente función en NavigationDrawerFragment

private ActionBar getActionBar() { return ((ActionBarActivity)getActivity()).getSupportActionBar(); }


Tenía esto en un dispositivo 4.4.2, pero 5+ estaba bien. La causa: dentro de la inicialización de una vista personalizada, estaba creando un TextView(Context context, AttributeSet attrs, @AttrRes int defStyleAttr, @StyleRes int defStyleRes) , que es API 21+.

Android Studio 2.1 no se queja de ello a pesar de que está anotado TargetApi(21) . Aparentemente, Android Studio 2.2 corregirá esto y lo mostrará correctamente como un error.

Espero que esto ayude a alguien.


Tengo el mismo problema porque no implementé el oyente. Vea el siguiente código con /*Add This!*/ .

public class SomeActivity extends AppCompatActivity implements BlankFragment.OnFragmentInteractionListener /*Add this!*/ { @Override /*Add This!*/ public void onFragmentInteraction(Uri uri){ /*Add This!*/ } /*Add This!*/ }

FYI, mi clase de fragmento es algo como lo siguiente:

public class SomeFragment extends Fragment { private OnFragmentInteractionListener mListener; @Override public void onAttach(Activity activity) { super.onAttach(activity); try { mListener = (OnFragmentInteractionListener) activity; } catch (ClassCastException e) { throw new ClassCastException(activity.toString() + " must implement OnFragmentInteractionListener"); } } public interface OnFragmentInteractionListener { public void onFragmentInteraction(Uri uri); } }

Editar:

También veo este mismo mensaje de error en otras circunstancias cuando hay una excepción en la función onCreate del Fragment . Tengo algo como el siguiente:

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View rootView = inflater.inflate(R.layout.fragment_main, container, false); int ID = getArguments().getInt("val"); return rootView; }

Debido a que reutilizo este fragmento, me olvido de establecer argumentos. Entonces el resultado de getArguments() es null . Obviamente, obtengo una excepción de puntero null aquí. Sugeriré que también vigiles errores como este.


Tuve el mismo problema, problema, intenté todas las respuestas en este hilo inútilmente. Mi solución fue: no había agregado una ID en el XML de actividad. No pensé que importaría, pero lo hizo.

Entonces en el Activity XML tuve:

<fragment android:name="com.covle.hellocarson.SomeFragment" android:layout_width="wrap_content" android:layout_height="wrap_content"/>

Pero debería haber tenido:

<fragment android:id="@+id/some_fragment" android:name="com.covle.hellocarson.SomeFragment" android:layout_width="wrap_content" android:layout_height="wrap_content"/>

Si alguien estaría feliz de comentar por qué es esto, soy todo oídos, espero que esto ayude.


Tuve este error también, y después de una depuración muy larga, el problema parecía ser que mi MainClass extendía Activity en lugar de FrameActivity, en mi caso, el xml no era un problema. Espero ayudarte


también debemos agregar lo siguiente en build.gradle (app)

compile ''com.android.support:appcompat-v7:23.1.1'' compile ''com.android.support:design:23.1.1''

cada vez que estamos utilizando nuevos diseños o nuevas características de diseño. Espero que esto te ayude.


TL / DR : se ha producido una excepción durante la creación de un fragmento al que se hace referencia desde un XML de diseño de nivel superior. Esta excepción provocó que la inflación de diseño de nivel superior fallara, pero la excepción inicial no se informó ; solo aparece la falla de inflación de nivel más alto en el seguimiento de la pila. Para encontrar la causa raíz, debe capturar y registrar la excepción inicial .

La causa inicial del error podría ser una gran variedad de cosas, por lo que aquí hay tantas respuestas diferentes sobre qué fue lo que solucionó el problema para cada persona. Para algunos, tenía que ver con los atributos id , class o name . Para otros fue debido a un problema de permisos o una configuración de compilación. Para mí, esos no solucionaron el problema; en cambio, había un recurso drawable-ldrtl-xhdpi que existía solo en drawable-ldrtl-xhdpi , en lugar de en un lugar aplicable como drawable .

Pero esos son solo detalles. El problema de la gran imagen es que el mensaje de error que aparece en logcat no describe la excepción que lo inició todo. Cuando un XML de diseño de nivel superior hace referencia a un fragmento, se onCreateView() al onCreateView() del fragmento. Cuando se produce una excepción en el elemento onCreateView() un fragmento (por ejemplo, al inflar el XML de diseño del fragmento), se produce un error en el inflado del XML de diseño de nivel superior. Esta falla de inflación de nivel superior es lo que se informa como una excepción en los registros de errores. Pero la excepción inicial no parece viajar en la cadena lo suficientemente bien como para ser informada.

Dada esa situación, la pregunta es cómo exponer la excepción inicial, cuando no aparece en el registro de errores.

La solución es bastante sencilla: coloque un bloque try / catch alrededor del contenido del fragmento onCreateView() , y en la cláusula catch , registre la excepción:

public View onCreateView(LayoutInflater inflater, ViewGroup contnr, Bundle savedInstSt) { try { mContentView = inflater.inflate(R.layout.device_detail_frag, null); // ... rest of body of onCreateView() ... } catch (Exception e) { Log.e(TAG, "onCreateView", e); throw e; } }

Puede que no sea obvio para qué hacer esto en la clase de fragmento onCreateView() , en cuyo caso, hágalo en cada clase de fragmento que se use en el diseño que causó el problema. Por ejemplo, en el caso del OP, el código de la aplicación donde se produjo la excepción fue

at android.app.Activity.setContentView(Activity.java:1901)

cual es

setContentView(R.layout.activity_main);

Por lo tanto, debe detectar excepciones en onCreateView() de cualquier fragmento al que se haga referencia en layout activity_main .

En mi caso, la excepción de causa raíz resultó ser

Caused by: android.content.res.Resources$NotFoundException: Resource "com.example.myapp:drawable/details_view" (7f02006f) is not a Drawable (color or path): TypedValue{t=0x1/d=0x7f02006f a=-1 r=0x7f02006f}

Esta excepción no apareció en el registro de errores hasta que la atrapé en onCreateView() y la onCreateView() forma explícita. Una vez que se registró, el problema fue lo suficientemente fácil de diagnosticar y corregir ( details_view.xml existía solo en la carpeta ldrtl-xhdpi , por algún motivo). La clave fue captar la excepción que era la raíz del problema y exponerlo.

No está de más hacer esto como una repetición en todos los métodos de tus fragmentos onCreateView() . Si hay una excepción no detectada allí, se bloqueará la actividad independientemente. La única diferencia es que si captura y registra la excepción en onCreateView() , no estará en la oscuridad en cuanto a por qué sucedió.

PD. Me acabo de dar cuenta de que esta respuesta está relacionada con @ DaveHubbard, pero utiliza un enfoque diferente para encontrar la causa raíz (registro vs. depurador).