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 das 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 Hochformatmodus umschalte, funktioniert alles gut. Aber wenn ich auf mein Fragment klicke (und ich kann mein Fragment sehen) und dann in den anderen Modus wechseln, erhalte ich den Fehler. Irgendeine Idee, wie ich es lösen kann? Ich habe hier ein paar 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
Wie hdemirchian gesagt hat, stellen Sie sicher, dass Sie Folgendes verwenden:
import Android.support.v4.app.Fragment;
Stellen Sie außerdem sicher, dass die Aktivität, die die Fragmente verwendet, FragmentActivity
statt der regulären Activity
erweitert.
import Android.support.v4.app.FragmentActivity;
um die FragmentActivity
-Klasse zu erhalten.
Die Ausnahme Android.view.InflateException: Binary XML file line: #... Error inflating class fragment
kann auftreten, wenn Sie mit getActivity()
in Ihrem Fragment manipulieren, bevor onActivityCreated()
aufgerufen wird. In diesem Fall erhalten Sie eine falsche Aktivitätsreferenz und können sich nicht darauf verlassen.
Zum Beispiel ist das nächste Muster falsch:
@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;
}
Korrekturmuster Nr. 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;
}
Richtiges Muster Nr. 2
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Button button = getActivity().findViewById(R.id...);
button.setOnClickListener(...);
}
Stellen Sie sicher, dass Ihre Activity
die FragmentActivity
erweitert.
Ich hatte den gleichen Fehler. Ich habe den ganzen Tag gegraben, weiß nicht, aber ich glaube, ich habe ~ 25 Lösungen für dieses Problem versucht. Keiner funktionierte, bis ich um 2 Uhr morgens herausfand, dass mir diese Zeile bei apps manifest xml fehlte:
<meta-data Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version" />
Diese Zeile befand sich im <application>
-Tag. Ich hoffe wirklich, dass dies für jemanden hilft . GL.
Ich hatte das gleiche Problem. Die Lösung für mich war die Reihenfolge von super.onCreate und setContentView innerhalb der FragmentActivity
Die folgende Bestellung funktioniert gut:
super.onCreate(savedInstanceState);
setContentView(R.layout.fc_activity_list_profiles);
Ich hatte das gleiche Problem, mit dem Sie konfrontiert sind ... Keiner der Tipps oben hat mir geholfen. Später stellte ich fest, dass ich nur meine Importe korrigieren musste:
import Android.app.Fragment;
zu:
import Android.support.v4.app.Fragment;
Auf die harte Art und Weise gelernt - wenn Sie ein XML-Layout-basiertes <fragment>
-Tag in ein (möglicherweise) dynamisch geladenes Fragment aus FragmentManager
einbetten, erhalten Sie seltsame Fehler und versuchen, Ihre Fragment-XML zu vergrößern.
Es stellt sich heraus, dass dies nicht unterstützt wird - es funktioniert gut, wenn Sie dies durch den reinen FragmentManager
-Ansatz tun.
Ich habe dieses Problem erhalten, weil ich versucht habe, ein Fragment aus einem XML-Code in einen <DrawerLayout>
zu laden. Dies führte zu einem Absturz der onCreateView()
-Methode, als ich den Back-Stack ablegte.
Stellen Sie sicher, dass in der onCreateView-Methode des Fragments keine Ausnahme ausgelöst wird. Wenn in dieser Methode eine Ausnahme ausgelöst wird, zeigt logcat keine genauen Details der Ausnahme, sondern immer die folgende Meldung:
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)
Hast du es versucht:
<fragment
Android:name="de.androidbuch.activiti.task.TaskDetailsFragment"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent" />
Wenn Ihre TaskDetailsFragment
-Erweiterung Android.app.Fragment
ist, ändern Sie sie in onCreateView()
.
Geben Sie Ihre Ansicht zurück, die Sie im Fragment anzeigen möchten, oder konvertieren Sie Ihr Layout mithilfe von LayoutInflater in Ansicht, und geben Sie es zurück.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View mainview = inflater.inflate(R.layout.main, null);
return mainview;
}
Hoffe das klappt. :)
Überprüfen Sie Ihren Klassenpfad. Dies könnte der Ansichtsgenerator sein. Ihre Klassendefinition konnte nicht wie in Ihrer XML-Klasse definiert definiert werden.
Ich habe diesen Fehler aus verschiedenen Gründen erhalten.
Schritte zum Reproduzieren:
~> Mein Problem war, dass ich eine völlig neue, leere Anwendung erstellt habe.
~> Ich habe dann ein benutzerdefiniertes Fragment aus dem Menü Datei ~> Neue Datei erstellt.
~> Das Fragment wurde durch Hinzufügen von Layouts und Schaltflächen usw. angepasst.
~> Verweise auf das neue benutzerdefinierte Fragment in der automatisch generierten activity_my.xml, das beim Erstellen der Anwendung für mich generiert wurde. Dadurch konnte XML die Objekte für mich generieren.
Hier ist der Haken beim Erstellen des benutzerdefinierten Fragments über Datei -> Menü Neue Datei. Es generiert automatisch einen Schnittstellen-Funktionsstub und platziert ihn am Ende der Fragment-Klassendatei.
Dies bedeutet, dass Ihre MyActivity-Klasse diese Schnittstelle implementieren muss. Wenn dies nicht der Fall ist, tritt der obige Fehler nur auf, wenn auf das Fragment aus XML verwiesen wird. Durch das vollständige Entfernen des Verweises für das Fragment in der XML-Datei und das Erstellen des Fragments durch Code in der MyActivity.Java-Klassendatei generiert Logcat einen präziseren Fehler, der das Problem ausführlich erläutert und die Schnittstelle beschwert. Dies wird in der Projektvorlagenaktivität + Fragment gezeigt. Obwohl <~ diese Projektvorlage den Schnittstellen-Stub nicht generiert.
Für mich war es nach dem Scrollen in der Stack-Spur, dass ich die Berechtigung für Android.permission.ACCESS_NETWORK_STATE verpasste
nach dem Hinzufügen dieser Berechtigung wurde es behoben
Wenn Sie über separate Layoutdateien für den Hoch- und Querformatmodus verfügen und einen Inflationsfehler erhalten, wenn Sie nach dem Klicken auf ein Element die Ausrichtung ändern, besteht höchstwahrscheinlich eine Diskrepanz zwischen den Layoutdateien.
Wenn Sie den Fehler erhalten, ist es nur dann, wenn Sie im Querformatmodus oder nur im Hochformatmodus oder beides auf das Element klicken? Verwendet Ihre TaskDetailsFragment-Aktivität eine Layoutdatei, die Abweichungen zwischen Quer- und Hochformatmodus aufweisen kann?
In diesem Fall bestand mein Problem darin, dass in einer meiner Methoden, die später im Lebenszyklus aufgerufen wurde, eine stumme Nullzeiger-Ausnahme vorlag. Dies verursachte für mich die Ausnahme "Fehler beim Aufblasen von Klassenfragmenten". Kurz gesagt, denken Sie daran, den weiter unten in der Ausnahmestapel-Ablaufverfolgung nach einer möglichen Ursache zu überprüfen.
Nachdem ich die Nullzeigerausnahme behoben hatte, wurde mein Fragment gut geladen.
Keine der oben genannten Lösungen hat mir geholfen. Im Protokoll konnte ich die Details der Ausnahme wie folgt finden:
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.
Ich habe das gemacht und mein Code hat funktioniert!
<meta-data Android:name="com.google.Android.maps.v2.API_KEY" Android:value="AIzaSyCl1yGPZ3mpxxxxxxxAz2R-t7zcWVzrHUL9k"/>
</application>
Hatte den gleichen Fehlertyp, bei dem genau die gleiche Fehlermeldung in logcat angezeigt wurde. Ich musste Änderungen am Java Build Path unter Project->Properties
vornehmen. Ich hatte Google Maps-bezogene Bibliotheken wie Android-support-v4.jar
und google-play-services.jar
hinzugefügt. es fehlte mir jedoch, diese auf dem 'Build class path'
im 'Order and Export'
-Optionsmenü zu enthalten. Vielleicht liegt der Fehler hier.
Versuchen Sie, Bibliotheken in den Build-Klassenpfad aufzunehmen.
Die Reihenfolge, in der die Klassen erstellt werden, kann ebenfalls den Fehler auslösen. Ich empfehle daher auch, die Reihenfolge des Gebäudepfads neu zu ordnen. Der Fehler verschwand, als ich die folgende Reihenfolge verwendete: 'my_project_name/src'->'my_project_name/gen'->'Android Private Libraries'
. Die letzte Einheit enthält die zuvor erwähnten JAR-Dateien.
Wenn Sie Fragment
statisch hinzufügen, d. H. In xml, haben Sie möglicherweise OnFragmentInteractionListener
in Ihrer Activity
-Klasse nicht implementiert. Dann würde die Schnittstellenimplementierung das Problem lösen. Wenn Sie Fragment
dynamisch hinzufügen, dh in der Java-Klasse, ist dies nicht die Lösung. Weil Sie mit IDE nicht fortfahren können, ohne die erforderlichen Schnittstellen zu implementieren.
Hatte gerade den gleichen Fehler. Mein Grund war die Sichtbarkeit meiner Fragmentklasse. Es wurde auf Standard gesetzt, sollte öffentlich sein.
stellen Sie sicher, dass Sie diese verwendet haben
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="AIzaSyBEwmfL0GaZmdVqdTxxxxxxxx-rVgvY" />
nicht das..
<meta-data
Android:name="com.google.Android.gms.version"
Android:value="AIzaSyBEwmfL0GaZmdVqdTCvxxxxxxx-rVgvY" />
Ich hatte ein ähnliches Problem. Nach dem Ausführen des AdMob-Beispiels habe ich versucht, Anzeigen in meine App einzufügen, was zu diesem Fehler führte:
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
Die Lösung ist: 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 zu einer ActionBarActivity hinzufügen.
Mein Vorschlag ist: Starten Sie vom AdMob-Beispiel aus und fügen Sie Ihre vorhandene App hinzu: Ich hätte viel Zeit gespart !!!
Wenn Sie nichts ändern möchten, gehen Sie zum Tag " fragment "
mach das,
<fragment
Android:visibility="gone" (Visibility will not work, just helps in removing frag from xml viewer)(If you want the visibility to be gone make it in your fragment root element visibility=gone)
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:name="com.example.YOUR_FRAGMENT" (This is important)
/>
Wenn Sie AppCompatActivity erben möchten, können Sie Folgendes tun: _. In der xml-Aktivität verwenden Sie ein FrameLayout
<FrameLayout
Android:id="@+id/result_fragment"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:layout_below="@+id/progress_frame"/>
und in der Aktivität onCreate
-
final FragmentManager supportFragmentManager = getSupportFragmentManager();
FragmentTransaction ft = supportFragmentManager.beginTransaction();
ft.replace(R.id.result_fragment, fphResultActivityFragment, "result fragment");
ft.commitAllowingStateLoss();
Verwenden Sie in Ihrer XML-Datei nur ein Tag anstelle des Tags . Der Inflater versucht, ein Android.app.Fragment zu erstellen, das bei API <10 ..__ fehlschlägt. Sie müssen also eine Ansichtsgruppe eines anderen Typs erstellen .
Nach einem Tag Kampf fand ich heraus, dass einige Szenarioüberprüfungen vor Ihnen liegen.
Wenn alles wie google code aussieht, prüfen Sie bitte die Manifestdatei in meinem Fall. Ich habe einen Geo-Key und einen Map-Key hinzugefügt.
Hinweis - Fügen Sie in der Manifestdatei nicht zwei Schlüssel hinzu. Entfernen Sie den Zuordnungsschlüssel.
meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="@string/google_maps_key"/>
code oben und fügen Sie diesen Code hinzu.
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="@string/auto_location"/>
<meta-data
Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version"/>
Könnten Sie die onCreate
- und onCreateView
-Methoden des Fragments posten? Ich hatte genau die gleiche Ausnahme, die durch eine Ausnahme in der fragment onCreate
-Methode verursacht wurde. Als ich das Problem behoben habe, wurde der Fehler behoben, der das Klassenfragment aufbläst.
Ich habe diesen Fehler bei der Verwendung von ListFragment erhalten, aber die Listenansicht-ID 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
Ich habe diesen Fehler in Android Studio erhalten. Das Problem bestand darin, dass mein Fragment ein relatives Layout hatte, während der Code in der OnCreateView-Funktion war
mDrawerListView = (ListView) inflater.inflate(
R.layout.fragment_navigation_drawer, container, false);
tut Ihr Code dasselbe?
Ich habe den gleichen Fehler erhalten, aber mein Problem war, dass mein Fragment im XML-Layout der übergeordneten Aktivität keine ID hatte.
In meinem Fall,
...
Android.view.InflateException:
Binary XML file line #24: Error inflating class fragment
...
Caused by: Java.lang.InstantiationException:
class *.HomeFragment has no zero argument constructor
...
Nachdem ich den leeren Konstruktor hinzugefügt habe, wurde er aufgelöst.
public HomeFragment() {}
Hier ist meine Lösung für dieses Problem.
Caused by: Android.view.InflateException: Binary XML file line #31: Error inflating class fragment
Caused by: Java.lang.IllegalArgumentException: Binary XML file line #31: Duplicate id 0x7f09006d, tag null, or parent id 0xffffffff with another fragment for com.example.eduardf.audit.DateTime
In meinem Fall ist der Fehler beim erneuten Öffnen des DialogFragments mit einem Fragment aufgetreten.
<Android.support.constraint.ConstraintLayout
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical">
<TextView
Android:id="@+id/title"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:drawableStart="@drawable/ic_black_edit_24px"
Android:singleLine="true" />
<fragment
Android:id="@+id/fragment_date"
Android:name="com.example.eduardf.audit.DateTime"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
tools:layout="@layout/fragment_date_time" />
</LinearLayout>
</Android.support.constraint.ConstraintLayout>
DailogFragment speichert das Fragment nach dem ersten Aufpumpen. Um dies zu verhindern, habe ich das Fragment gewaltsam gelöscht.
@Override
public void onDestroyView () {
if (!(afterRotate || getActivity() == null)) {
final FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
final Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_date);
if (fragment != null)
fragmentManager.beginTransaction().remove(fragment).commit();
}
super.onDestroyView();
}
Auch musste das Fragment unnötig entfernt werden, zum Beispiel, wenn Sie den Bildschirm drehen.
private boolean afterRotate = false;
...
@Override
public void onSaveInstanceState (Bundle outState) {
super.onSaveInstanceState(outState);
afterRotate = true;
}
Wenn Ihr Fragment ein Listenfragment ist, muss die Aktivität, die dieses Fragment verwendet, die onFragmentInteraction
-Schnittstelle implementieren.
Mein einfacher Ansatz
Wenn Sie <fragment>
in Ihrer XML-Datei verwenden, müssen Sie das name
-Attribut i.e angeben.
<fragment
Android:name='path.to.your.fragment
/>`
dadurch wird Ihr Fragment initialisiert und Sie müssen es nicht von Java aus tun.
Wenn Sie die Java-Methode zum Hinzufügen von Fragmenten verwenden möchten, verwenden Sie ein beliebiges Layout wie
<LinearLayout
Android:id="@+id/fragment_container"
/>
und verwenden Sie diesen Container für Ihr Fragment
transaction.replace(R.id.fragment_container, fragment_obj);
Stellen Sie sicher, dass Ihre Aktivität FragmentActivity oder AppCompatActivity erweitert
Vergewissern Sie sich, dass Sie Ihre google-services.json in Ihrem entsprechenden Ordner gespeichert haben, und fügen Sie sie umgehend hinzu
<meta-dataandroid:name="com.google.Android.geo.API_KEY" Android:value="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" />
in Ihrer Manifestdatei. Überprüfen Sie Ihren Schulabschluss mit "Implementierung" com.google.Android.gms: play-services-maps: 15.0.1 ""
Es wird klappen.