J'obtiens 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 paysage. J'utilise des fragments. Mon xml est:
<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 je passe en mode paysage et portrait, tout fonctionne correctement. Mais lorsque 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 celles-ci 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
Réponses:
Comme l'a dit hdemirchian, assurez-vous d'utiliser:
Et assurez-vous également que l'activité qui utilise le (s) fragment (s) s'étend
FragmentActivity
au lieu de la normaleActivity
,pour obtenir la
FragmentActivity
classe.la source
L'exception
android.view.InflateException: Binary XML file line: #... Error inflating class fragment
peut se produire si vous manipulez à l'getActivity()
intérieur de votre fragment avant d'onActivityCreated()
être appelé. 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 faux:
Corriger le motif n ° 1
Corriger le motif n ° 2
la source
getActivity()
intérieuronActivityCreated()
ou dans n'importe quelle méthode de cycle de vie ultérieure, mais avantonDestroyView()
.Assurez-vous que votre
Activity
extensionFragmentActivity
.la source
J'ai eu la même erreur. Je creusais toute la journée, je sais pas mais je pense que j'ai essayé ~ 25 solutions sur ce problème. Aucun n'a fonctionné jusqu'à 2 heures du matin, j'ai découvert qu'il me manquait cette ligne dans les applications manifest xml:
Cette ligne était à l'intérieur de l'
<application>
étiquette. J'espère vraiment que cela aide quelqu'un. GL.la source
J'ai eu le même problème. La solution pour moi était l'ordre de super.onCreate et setContentView dans FragmentActivity
L'ordre suivant fonctionne bien:
la source
super
doit toujours être appelée au début de la méthode.super.method()
faut appeler en premier. Cela dépend de ce que fait la méthode de la super classe. Dans ce cas,FragmentActivity
il effectue une initialisation nécessaire pour fairesetContentView
fonctionner correctement. Cependant, dans une autre méthode (par exempleonKeyUp
), vous voudrez peut-être effectuer un travail conditionnel avec l'action, mais revenezsuper.onKeyUp
dans ce cas, vous voudrez très probablement appelersuper.onKeyUp
à la toute fin de la fonction.super()
(le constructeur de la superclasse) doit être la première fonction appelée dans tout constructeur de classes enfants, mais son appel n'est pas nécessairement obligatoire (cela dépendrait entièrement de la classe étendue).Les fragments ne peuvent pas être imbriqués dans XML
J'ai appris cela à la dure - si vous imbriquez une
<fragment>
balise basée sur une mise en page XML dans un fragment (potentiellement) chargé dynamiquementFragmentManager
, alors vous commencez à obtenir des erreurs étranges, en essayant de gonfler votre fragment xml.Il s'avère que cela n'est pas pris en charge - cela fonctionnera bien si vous le faites uniquement par l'
FragmentManager
approche.J'avais ce problème parce que j'essayais de charger un fragment dans un
<DrawerLayout>
fichier xml, et cela provoquait un plantage dans laonCreateView()
méthode lorsque j'ai fait sauter la pile arrière.la source
appcompat-v7:23.3.0
<fragment>
par<frameLayout>
travaillé. Je suis toujours en train de le comprendre. - stackoverflow.com/a/19167009/5477548J'avais le même problème que vous. Aucun des conseils ci-dessus ne m'a aidé. Plus tard, j'ai découvert que tout ce que j'avais à faire était de corriger mes importations depuis:
à:
la source
As-tu essayé:
la source
Assurez-vous qu'aucune exception n'est 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 affichera toujours le message:
la source
Si vous
TaskDetailsFragment
étendezandroid.app.Fragment
, changezonCreateView()
.Renvoyez votre vue que vous souhaitez afficher dans le fragment ou convertissez votre mise en page en vue à l'aide de LayoutInflater et renvoyez-la.
J'espère que cela fonctionne. :)
la source
Vérifiez votre chemin de classe, il se peut que l'inflateur de vue ne trouve pas la définition de votre classe telle que définie dans votre xml class = "de.androidbuch.activiti.task.TaskDetailsFragment" le chemin ci-dessus peut être erroné.
la source
Je recevais cette erreur pour différentes raisons.
Étapes à suivre pour reproduire:
~> Mon problème était que j'ai créé une toute nouvelle application vierge.
~> J'ai ensuite généré un fragment personnalisé à partir du menu Fichier ~> Nouveau fichier.
~> J'ai procédé à la personnalisation du fragment en ajoutant des dispositions et des boutons, etc.
~> Référencé le nouveau fragment personnalisé dans le fichier activity_my.xml généré automatiquement qui a été généré pour moi lors de la création de l'application. Cela a permis au XML de générer les objets pour moi.
Voici le piège lors de la génération du fragment personnalisé via le menu Fichier ~> Nouveau fichier, il génère automatiquement un stub de fonction d'interface et le place au bas du fichier de classe de 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 du 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.
la source
Pour moi, c'est après avoir fait défiler la trace de la pile, j'ai trouvé que je manquais l'autorisation pour android.permission.ACCESS_NETWORK_STATE
après avoir ajouté cette autorisation, il a été corrigé
la source
Si vous avez des fichiers de mise en page distincts pour les modes portrait et paysage et que vous obtenez une erreur d'inflation chaque fois que vous changez d'orientation après avoir cliqué sur un élément, il y a très probablement une différence entre vos fichiers de mise en page.
Lorsque vous obtenez l'erreur, est-ce uniquement 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 écarts entre les modes paysage et portrait?
la source
Si vous ajoutez de
Fragment
manière statique, c'est-à-dire en xml, vous avez peut-être manqué de l'implémenterOnFragmentInteractionListener
dans votreActivity
classe. Ensuite, la mise en œuvre de l'interface résoudrait le problème. Si vous ajoutezFragment
dynamiquement, c'est-à-dire en classe java, ce n'est pas la solution. Parce que l'EDI lui-même ne vous permettra pas de continuer sans implémenter les interfaces requises.la source
Mon problème dans ce cas était une simple instance d'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 de gonflement du fragment de classe". En bref, n'oubliez pas de vérifier plus bas la trace de la pile d'exceptions pour une cause possible.
Une fois que j'ai résolu l'exception du pointeur nul, mon fragment s'est bien chargé.
la source
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 mentionné ci-dessous:
Je l'ai fait et mon code fonctionnait!
la source
Si vous ne voulez rien changer et optez pour la balise " fragment "
fais ça,
la source
Avait le même type d'erreur, où exactement le même message d'erreur dans logcat était affiché. J'avais besoin d'apporter des modifications dans le chemin de construction Java situé sous
Project->Properties
. J'avais inclus des bibliothèques liées à Google Maps commeandroid-support-v4.jar
etgoogle-play-services.jar
; cependant je manquais d'inclure ceux-ci'Build class path'
dans le'Order and Export'
menu d'options. Peut-être que l'erreur réside ici.Essayez d'inclure des bibliothèques dans le chemin de la classe de construction.
L'ordre dans lequel les classes sont construites peut également déclencher l'erreur, donc mon conseil est également d'essayer de réorganiser l'ordre du chemin de construction. L'erreur a disparu lorsque je 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.la source
Dans votre fichier xml, utilisez simplement un au lieu de la balise. Le gonfleur essaie de créer un android.app.Fragment à partir duquel échouera sur l'API <10. Vous devez donc créer un groupe de vues d'un type différent.
la source
J'ai eu cette erreur lors de l'utilisation d'un ListFragment mais l'ID de vue de liste était listView1 au lieu de list.
'Votre contenu doit avoir un ListView dont l'attribut id est' android.R.id.list ''
http://developer.android.com/reference/android/app/ListFragment.html
la source
assurez-vous que vous avez utilisé celui-ci
pas ça..
la source
J'ai juste eu cette même erreur. La raison de la mienne était la visibilité de ma classe de fragments. Il a été défini par défaut, devrait être public.
la source
Pourriez-vous publier les fragments
onCreate
et lesonCreateView
méthodes? J'avais exactement la même exception qui était causée par une exception dans laonCreate
méthode de fragment , quand j'ai corrigé ce problème, cela a corrigé le fragment de classe de gonflage d'erreur.la source
Je recevais cette erreur dans Android Studio, le problème était que mon fragment avait une disposition relative alors que le code de la fonction OnCreateView était
votre code fait-il la même chose?
la source
Si vous voulez hériter de l' AppCompatActivity , vous pouvez faire quelque chose comme ceci- Dans l'activité xml, utilisez un FrameLayout comme celui- ci-
et dans l'activité
onCreate
-la source
J'ai eu la même erreur, mais mon problème était que mon fragment n'avait pas d'identifiant dans la mise en page XML de l'activité parent.
la source
Après une journée de lutte, j'ai trouvé une vérification de scénario peut-être que vous faites face au même,
Remarque - n'ajoutez pas deux clés dans le fichier manifeste supprimer la clé de mappage
ci-dessus et ajoutez ce code.
la source
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:
La solution est la suivante: vous ne pouvez pas insérer le fragment d'une annonce dans une ListActivity. Au lieu de cela, je pourrais l'ajouter à un FragmentActivity et à un ActionBarActivity sans aucun problème.
Ma suggestion est la suivante: partez de l'exemple AdMob et ajoutez-y votre application existante: j'aurais gagné beaucoup de temps !!!
la source
Si vous utilisez l'obfuscation avec le composant de navigation, vous devez exclure le fragment d'Android et vos arguments. Ajoutez ces lignes à vos fichiers proguard-rules:
la source