Erreur lors du gonflage d’un fragment de classe

Je reçois l’erreur

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 

lorsque je passe en mode portrait et en mode paysage. J’utilise des fragments. Mon xml est:

      

Si je passe en mode paysage et portrait, tout fonctionne bien. Mais quand je clique sur mon fragment (et que je peux voir mon fragment) puis que je passe à l’autre mode, j’obtiens l’erreur. Une idée de comment je peux le résoudre? J’ai trouvé des réponses ici mais aucune de ces réponses ne m’a aidé …

 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 

Comme le dit hdemirchian, assurez-vous d’utiliser:

 import android.support.v4.app.Fragment; 

Et assurez-vous également que l’activité qui utilise le (s) fragment (s) étend FragmentActivity au lieu de l’ Activity régulière,

 import android.support.v4.app.FragmentActivity; 

pour obtenir la classe FragmentActivity .

L’exception android.view.InflateException: Binary XML file line: #... Error inflating class fragment peut se produire si vous manipulez avec getActivity() dans votre fragment avant l’ onActivityCreated() . Dans ce cas, vous recevez une mauvaise référence d’activité et vous ne pouvez pas vous y fier.

Par exemple, le modèle suivant est incorrect:

 @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; } 

Motif correct # 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; } 

Motif correct # 2

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

Assurez-vous que votre Activity étend FragmentActivity .

J’ai eu la même erreur. Je creusais toute la journée, je ne sais pas, mais je pense que j’ai essayé ~ 25 solutions sur ce problème. Aucun n’a fonctionné jusqu’à 2h du matin, j’ai découvert que cette ligne manquait dans le manifeste des applications xml:

  

Cette ligne était à l’intérieur de la . J’espère vraiment que cela aide quelqu’un. GL.

J’ai eu le même problème. La solution pour moi était l’ordre de super.onCreate et de setContentView dans FragmentActivity

L’ordre suivant fonctionne bien:

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

J’avais le même problème que tu fais face. Aucun des conseils sur le dessus ne m’a aidé. Plus tard, j’ai trouvé que tout ce que j’avais à faire était de réparer mes importations à partir de:

 import android.app.Fragment; 

à:

 import android.support.v4.app.Fragment; 

Les fragments ne peuvent pas être nesteds dans XML

Apprenez cela à la dure – si vous imbriquez une balise basée sur une disposition XML dans un (potentiellement) chargé dynamicment à partir de FragmentManager , vous commencez à obtenir des erreurs étranges, en essayant de gonfler votre fragment xml.

Il s’avère que ce n’est pas pris en charge – cela fonctionnera correctement si vous le faites via l’approche de FragmentManager .

J’avais ce problème parce que j’essayais de charger un fragment dans un partir de xml, et cela provoquait un plantage dans la méthode onCreateView() lorsque j’ai sorti la stack arrière.

Assurez-vous qu’il n’y a aucune exception déclenchée dans la méthode onCreateView du fragment. Si une exception est déclenchée dans cette méthode, logcat n’affichera pas les détails exacts de l’exception, mais affiche toujours le message:

 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) 

As-tu essayé:

   

Si votre TaskDetailsFragment étendant android.app.Fragment , changez dans onCreateView() .

Renvoyez votre vue à afficher dans le fragment ou convertissez-la en vue à l’aide de LayoutInflater et renvoyez-la.

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

J’espère que cela fonctionne. 🙂

Vérifiez votre chemin de classe, cela pourrait être le gonfleur de vue qui n’a pas trouvé votre définition de classe telle que définie dans votre xml class = “de.androidbuch.activiti.task.TaskDetailsFragment”, le chemin ci-dessus pourrait être faux.

Pour moi, c’est après avoir fait défiler la trace dans la stack que j’ai trouvé qu’il manquait la permission pour android.permission.ACCESS_NETWORK_STATE

après avoir ajouté cette permission, il a été corrigé

Si vous disposez de fichiers de disposition distincts pour les modes portrait et paysage et que vous obtenez une erreur de gonflage chaque fois que vous modifiez l’orientation après avoir cliqué sur un élément, il existe très probablement une différence entre vos fichiers de mise en page.

Lorsque vous obtenez l’erreur, est-ce seulement lorsque vous cliquez sur l’élément en mode paysage ou uniquement en mode portrait ou les deux? Votre activité TaskDetailsFragment utilise-t-elle un fichier de mise en page qui pourrait présenter des différences entre les modes paysage et portrait?

Je recevais cette erreur pour différentes raisons.

Étapes pour reproduire:

~> Mon problème était que j’avais créé une nouvelle application vierge.

~> J’ai ensuite généré un fragment personnalisé à partir du menu Fichier ~> Nouveau fichier.

~> Nous avons procédé à la personnalisation du fragment en ajoutant des mises en page et des boutons, etc.

~> Référencé le nouveau fragment personnalisé dans le fichier activity_my.xml généré automatiquement lors de la création de l’application. Cela a permis au XML de générer les objects pour moi.

Heres est le problème lors de la génération du fragment personnalisé via File ~> New File Menu, il génère automatiquement un stub de fonction d’interface et le place au bas du fichier de classe fragment.

Cela signifie que votre classe MyActivity doit implémenter cette interface. Si ce n’est pas le cas, l’erreur ci-dessus se produit uniquement lors du référencement du fragment à partir de XML. En supprimant complètement la référence du fragment dans le XML et en créant le fragment via le code dans le fichier de classe MyActivity.java, Logcat génère une erreur plus concise expliquant le problème en détail et se plaignant de l’interface. Ceci est démontré dans l’activité de modèle de projet + fragment. Bien que, <~ ce modèle de projet ne génère pas le stub d’interface.

Mon problème dans ce cas était une instance simple consistant à avoir une exception de pointeur nul stupide dans l’une de mes méthodes qui était appelée plus tard dans le cycle de vie. Cela provoquait pour moi l’exception “Erreur lors du gonflement du fragment de classe”. En bref, n’oubliez pas de vérifier la trace de la stack des exceptions pour une cause possible.

Une fois que j’ai résolu l’exception de pointeur nul, mon fragment s’est bien chargé.

Aucune des solutions mentionnées ci-dessus ne m’a aidé. Dans le journal, j’ai pu trouver le détail de l’exception comme indiqué ci-dessous:

 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. 

Je l’ai fait et mon code fonctionnait!

   

Avait le même type d’erreur, où exactement le même message d’erreur dans logcat était affiché. Je devais apporter des modifications au chemin de Project->Properties Java situé sous Project->Properties . J’avais inclus des bibliothèques liées à Google Maps comme android-support-v4.jar et google-play-services.jar ; Cependant, il me manquait, y compris ceux sur le 'Build class path' à la 'Build class path' dans le menu d’options 'Order and Export' . Peut-être que l’erreur se trouve ici.

Essayez d’inclure des bibliothèques dans le chemin de la classe de génération.

L’ordre dans lequel les classes sont construites peut également déclencher l’erreur. Je vous conseille donc également de réorganiser l’ordre du chemin du bâtiment. L’erreur a disparu lorsque j’ai utilisé l’ordre suivant: 'my_project_name/src'->'my_project_name/gen'->'Android Private Libraries' . La dernière unité contient les fichiers jar mentionnés précédemment.

Dans votre fichier XML, utilisez simplement un tag au lieu de celui-ci. L’inflater essaie de créer un android.app.Fragment à partir duquel échouera l’API <10. Vous devez donc créer un groupe de vues d'un type différent.

J’ai eu cette erreur en utilisant un ListFragment mais l’id de la vue liste était listView1 au lieu de liste.

“Votre contenu doit avoir un ListView dont l’atsortingbut id est” android.R.id.list “”

http://developer.android.com/reference/android/app/ListFragment.html

Juste eu la même erreur. La raison de la mienne était la visibilité de ma classe de fragment. Il a été mis à défaut, devrait être public.

Pourriez-vous poster les méthodes onCreate et onCreateView du fragment? J’avais exactement la même exception causée par une exception dans la méthode fragment onCreate , quand j’ai corrigé ce problème, il a corrigé le fragment de classe de gonflement des erreurs.

Je recevais cette erreur dans le studio Android le problème était que mon fragment avait une disposition relative tandis que le code sur la fonction OnCreateView était

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

votre code fait-il la même chose?

Si vous voulez hériter de AppCompatActivity , vous pouvez faire quelque chose comme ceci: dans l’activité XML, utilisez un FrameLayout comme celui-ci –

  

et dans l’activité onCreate

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

J’ai eu la même erreur, mais mon problème était que mon fragment n’avait pas d’identifiant dans la disposition XML de l’activité parente.

Si vous ajoutez statiquement Fragment c’est-à-dire, dans xml, vous avez peut-être manqué d’implémenter OnFragmentInteractionListener dans votre classe Activity . Ensuite, l’implémentation de l’interface résoudrait le problème. Si vous ajoutez dynamicment Fragment , c’est-à-dire dans la classe Java, ce n’est pas la solution. Parce que l’EDI ne vous permettra pas de continuer sans implémenter les interfaces requirejses.

J’avais un problème similaire; Après avoir exécuté l’ exemple AdMob , j’ai essayé d’insérer des annonces dans mon application, provoquant cette erreur:

 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 solution est la suivante: vous ne pouvez pas insérer le fragment d’une annonce dans un object ListActivity. Au lieu de cela, je pourrais l’append à un FragmentActivity et à un ActionBarActivity sans aucun problème.

Ma suggestion est la suivante: commencez par l’exemple AdMob et ajoutez-y votre application existante: j’aurais économisé beaucoup de temps !!!

assurez-vous que vous avez utilisé celui-ci

  

pas ça..

  

Assurez-vous que votre activité étend FragmentActivity ou AppCompatActivity

Si votre fragment est un fragment de liste, l’activité qui utilise ce fragment doit implémenter l’interface onFragmentInteraction .

Dans mon cas,

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

Après avoir ajouté le constructeur vide, il est résolu.

 public HomeFragment() {}