Ich bekomme den Fehler
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
wenn ich über den Hoch- und Querformat wechsle. Ich benutze Fragmente. Meine XML ist:
<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>
Wenn ich im Quer- und Hochformat wechsle, funktioniert alles einwandfrei. Wenn ich jedoch auf mein Fragment klicke (und mein Fragment sehen kann) und dann in den anderen Modus wechsle, wird der Fehler angezeigt. Irgendeine Idee, wie ich es lösen kann? Ich habe hier einige Antworten gefunden, aber keine davon hat mir geholfen ...
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
Antworten:
Wie hdemirchian sagte, stellen Sie sicher, dass Sie verwenden:
Stellen Sie außerdem sicher, dass die Aktivität, die die Fragmente verwendet,
FragmentActivity
anstelle der regulären Aktivität erweitertActivity
wird.um die
FragmentActivity
Klasse zu bekommen .quelle
Die Ausnahme
android.view.InflateException: Binary XML file line: #... Error inflating class fragment
kann auftreten, wenn Sie mitgetActivity()
innerhalb Ihres Fragments manipulieren, bevoronActivityCreated()
Sie aufgerufen werden. In diesem Fall erhalten Sie eine falsche Aktivitätsreferenz und können sich nicht darauf verlassen.Zum Beispiel ist das nächste Muster falsch:
Richtiges Muster Nr. 1
Richtiges Muster Nr. 2
quelle
getActivity()
innerhalbonActivityCreated()
oder in jeder nachfolgenden Lebenszyklusmethode aufrufen , jedoch vorheronDestroyView()
.Stellen Sie sicher, dass Ihre
Activity
verlängertFragmentActivity
.quelle
Ich hatte den gleichen Fehler. Ich habe den ganzen Tag gegraben, keine Ahnung, aber ich glaube, ich habe ~ 25 Lösungen für dieses Problem ausprobiert. Keiner funktionierte, bis ich um 2 Uhr morgens herausfand, dass mir diese Zeile bei Apps Manifest XML fehlte:
Diese Zeile befand sich im
<application>
Tag. Ich hoffe wirklich, dass dies jemandem hilft. GL.quelle
Ich hatte das gleiche Problem. Die Lösung für mich war die Reihenfolge von super.onCreate und setContentView innerhalb der FragmentActivity
Folgende Bestellung funktioniert einwandfrei:
quelle
super
muss immer am Anfang der Methode aufgerufen werden.super.method()
zuerst aufgerufen werden muss. Es hängt davon ab, was die Methode der Superklasse macht. In diesem FallFragmentActivity
ist eine Initialisierung erforderlich, damit diesetContentView
Arbeit ordnungsgemäß funktioniert. Bei einer anderen Methode (z. B.onKeyUp
) möchten Sie möglicherweise einige Arbeiten mit der Aktion unter bestimmten Bedingungen ausführen, abersuper.onKeyUp
in diesem Fall möchten Sie höchstwahrscheinlichsuper.onKeyUp
ganz am Ende der Funktion aufrufen .super()
(der Konstruktor der Oberklasse) die erste Funktion sein muss, die in einem Konstruktor für untergeordnete Klassen aufgerufen wird. Der Aufruf ist jedoch nicht unbedingt obligatorisch (dies hängt vollständig von der Klasse ab, die erweitert wird).Fragmente können nicht in XML verschachtelt werden
Das haben Sie auf die harte Tour gelernt. Wenn Sie ein XML-Layout-basiertes
<fragment>
Tag in einem (möglicherweise) dynamisch geladenen Fragment aus verschachteln,FragmentManager
treten merkwürdige Fehler auf, wenn Sie versuchen, die XML Ihres Fragments aufzublähen.Es stellt sich heraus, dass dies nicht unterstützt wird - es wird gut funktionieren, wenn Sie dies nur durch den
FragmentManager
Ansatz tun .Ich bekam dieses Problem, weil ich versuchte, ein Fragment in eine
<DrawerLayout>
XML-Datei zu laden , und dies verursachte einen Absturz in deronCreateView()
Methode, als ich den Backstack platzte.quelle
appcompat-v7:23.3.0
<fragment>
mit<frameLayout>
gearbeitet. Ich finde es immer noch heraus. - stackoverflow.com/a/19167009/5477548Ich hatte das gleiche Problem wie Sie. Keiner der Tipps oben hat mir geholfen. Später stellte ich fest, dass ich nur meine Importe reparieren musste von:
zu:
quelle
Hast du es versucht:
quelle
Stellen Sie sicher, dass in der onCreateView-Methode des Fragments keine Ausnahme ausgelöst wird. Wenn bei dieser Methode eine Ausnahme ausgelöst wird, zeigt logcat keine genauen Details der Ausnahme an, sondern immer die folgende Meldung:
quelle
Wenn Sie
TaskDetailsFragment
verlängernandroid.app.Fragment
, ändern Sie inonCreateView()
.Geben Sie Ihre Ansicht zurück, die Sie im Fragment anzeigen möchten, oder konvertieren Sie Ihr Layout mithilfe von LayoutInflater in eine Ansicht und geben Sie sie zurück.
Hoffe das funktioniert. :) :)
quelle
Überprüfen Sie Ihren Klassenpfad. Dies könnte der Ansichtsinflator sein, der Ihre Klassendefinition nicht finden konnte, wie in Ihrer xml class = "de.androidbuch.activiti.task.TaskDetailsFragment" definiert. Der obige Pfad könnte falsch sein.
quelle
Ich habe diesen Fehler aus verschiedenen Gründen erhalten.
Schritte zum Reproduzieren:
~> Mein Problem war, dass ich eine brandneue leere Anwendung erstellt habe.
~> Ich habe dann ein benutzerdefiniertes Fragment aus dem Menü Datei ~> Neue Datei generiert.
~> Das Fragment wurde durch Hinzufügen von Layouts und Schaltflächen usw. angepasst.
~> Verweist auf das neue benutzerdefinierte Fragment in der automatisch generierten Datei activity_my.xml, das beim Erstellen der Anwendung für mich generiert wurde. Auf diese Weise konnte das XML die Objekte für mich generieren.
Hier ist der Haken beim Generieren des benutzerdefinierten Fragments über Datei ~> Menü Neue Datei. Es generiert automatisch einen Schnittstellenfunktionsstub und platziert ihn am Ende der Fragmentklassendatei.
Dies bedeutet, dass Ihre MyActivity-Klasse diese Schnittstelle implementieren muss. Ist dies nicht der Fall, tritt der obige Fehler nur auf, wenn auf das Fragment aus XML verwiesen wird. Wenn Sie die Referenz für das Fragment in XML vollständig entfernen und das Fragment durch Code in der Klassendatei MyActivity.java erstellen, generiert Logcat einen präziseren Fehler, der das Problem ausführlich erklärt und sich über die Schnittstelle beschwert. Dies wird in der Projektvorlagenaktivität + Fragment demonstriert. <~ Diese Projektvorlage generiert jedoch nicht den Schnittstellenstub.
quelle
Für mich war es nach dem Scrollen in der Stapelverfolgung, dass ich die Berechtigung für android.permission.ACCESS_NETWORK_STATE vermisse
Nach dem Hinzufügen dieser Berechtigung wurde es behoben
quelle
Wenn Sie separate Layoutdateien für den Hoch- und Querformat haben und beim Ändern der Ausrichtung nach dem Klicken auf ein Element ein Aufblasfehler angezeigt wird, besteht höchstwahrscheinlich eine Diskrepanz zwischen Ihren Layoutdateien.
Wenn Sie den Fehler erhalten, ist dies nur der Fall, wenn Sie im Querformat oder nur im Hochformat oder auf beides auf das Element klicken? Verwendet Ihre TaskDetailsFragment-Aktivität eine Layoutdatei, die möglicherweise Diskrepanzen zwischen Quer- und Hochformat aufweist?
quelle
Wenn Sie
Fragment
statisch hinzufügen , dh in XML, haben Sie möglicherweise die ImplementierungOnFragmentInteractionListener
in IhrerActivity
Klasse verpasst . Dann würde die Schnittstellenimplementierung das Problem lösen. Wenn SieFragment
dynamisch hinzufügen , dh in der Java-Klasse, ist dies nicht die Lösung. Da Sie mit der IDE selbst nicht fortfahren können, ohne die erforderlichen Schnittstellen zu implementieren.quelle
Mein Problem in diesem Fall war eine einfache Instanz einer dummen Nullzeigerausnahme in einer meiner Methoden, die später im Lebenszyklus aufgerufen wurde. Dies verursachte für mich die Ausnahme "Fehler beim Aufblasen des Klassenfragments". Kurz gesagt, denken Sie daran, den Ausnahmestapel-Trace weiter unten auf eine mögliche Ursache zu überprüfen.
Nachdem ich die Nullzeigerausnahme behoben hatte, wurde mein Fragment einwandfrei geladen.
quelle
Keine der oben genannten Lösungen hat mir geholfen. Im Protokoll konnte ich die Details der Ausnahme wie unten erwähnt finden:
Ich habe das gemacht und mein Code hat funktioniert!
quelle
Wenn Sie nichts ändern möchten, wählen Sie das Tag " fragment "
mach das,
quelle
Hatte den gleichen Fehlertyp, bei dem genau die gleiche Fehlermeldung in logcat angezeigt wurde. Ich musste Änderungen im Java-Erstellungspfad vornehmen, der sich unter befindet
Project->Properties
. Ich hatte Google Maps-bezogene Bibliotheken wieandroid-support-v4.jar
und aufgenommengoogle-play-services.jar
. Allerdings fehlten mir diese'Build class path'
im'Order and Export'
Optionsmenü. Vielleicht liegt der Fehler hier.Versuchen Sie, Bibliotheken in den Pfad der Build-Klasse aufzunehmen.
Die Reihenfolge, in der die Klassen erstellt werden, kann ebenfalls den Fehler auslösen. Daher empfehle ich auch, die Reihenfolge des Erstellungspfads neu zu ordnen. Der Fehler ist verschwunden, als ich die folgende Reihenfolge verwendet habe :
'my_project_name/src'->'my_project_name/gen'->'Android Private Libraries'
. Die letzte Einheit enthält die zuvor erwähnten JAR-Dateien.quelle
Verwenden Sie in Ihrer XML-Datei einfach ein anstelle des Tags. Der Inflater versucht, ein android.app.Fragment zu erstellen, von dem aus API <10 fehlschlägt. Sie müssen also eine Ansichtsgruppe eines anderen Typs erstellen.
quelle
Ich habe diesen Fehler bei der Verwendung eines ListFragments erhalten, aber die ID der Listenansicht war listView1 anstelle von list.
'Ihr Inhalt muss eine ListView haben, deren ID-Attribut' android.R.id.list 'ist.'
http://developer.android.com/reference/android/app/ListFragment.html
quelle
Stellen Sie sicher, dass Sie diese verwendet haben
nicht das..
quelle
Hatte gerade den gleichen Fehler. Der Grund für meine war die Sichtbarkeit meiner Fragmentklasse. Es wurde auf Standard gesetzt, sollte öffentlich sein.
quelle
Könnten Sie die Fragmente
onCreate
undonCreateView
Methoden posten ? Ich hatte genau die gleiche Ausnahme, die durch eine Ausnahme in der Fragmentmethode verursachtonCreate
wurde. Als ich dieses Problem behebte, wurde das Fehler beim Aufblasen des Klassenfragments behoben .quelle
Ich habe diesen Fehler in Android Studio erhalten. Das Problem war, dass mein Fragment ein relatives Layout hatte, während der Code in der OnCreateView-Funktion war
macht Ihr Code dasselbe?
quelle
Wenn Sie die AppCompatActivity erben möchten , können Sie Folgendes tun: Verwenden Sie in der Aktivitäts-XML ein FrameLayout wie das folgende:
und in der Aktivität
onCreate
-quelle
Ich habe den gleichen Fehler erhalten, aber mein Problem war, dass mein Fragment keine ID im XML-Layout der übergeordneten Aktivität hatte.
quelle
Nach einem Tag Kampf fand ich einige Szenario-Check kann sein, dass Sie vor dem gleichen stehen,
Hinweis - Fügen Sie nicht zwei Schlüssel zur Manifestdatei hinzu, und entfernen Sie den Kartenschlüssel
über Code und fügen Sie diesen Code hinzu.
quelle
Ich hatte ein ähnliches Problem; Nach dem Ausführen des AdMob-Beispiels habe ich versucht, Anzeigen in meine App einzufügen, was folgenden Fehler verursachte:
Die Lösung lautet: Sie können das Fragment für eine Anzeige nicht in eine ListActivity einfügen. Stattdessen könnte ich es problemlos zu einer FragmentActivity und einer ActionBarActivity hinzufügen.
Mein Vorschlag ist: Beginnen Sie mit dem AdMob-Beispiel und fügen Sie Ihre vorhandene App hinzu: Ich hätte viel Zeit gespart !!!
quelle
Wenn Sie die Verschleierung mit der Navigationskomponente verwenden, müssen Sie das Android-Fragment und Ihre Argumente ausschließen. Fügen Sie diese Zeilen zu Ihren Proguard-Regeldateien hinzu:
quelle