Otrzymuję błąd
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
kiedy przełączam się przez tryb portretowy i poziomy. Używam fragmentów. Mój xml to:
<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>
Jeśli przełączę się w trybie poziomym i pionowym, wszystko działa dobrze. Ale kiedy klikam na mój fragment (i widzę mój fragment), a następnie przełączam się na inny tryb, pojawia się błąd. Masz jakiś pomysł, jak mogę to rozwiązać? Znalazłem tutaj kilka odpowiedzi, ale żadna z nich nie pomogła mi ...
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
Odpowiedzi:
Jak powiedział hdemirchian, upewnij się, że używasz:
Upewnij się również, że działanie, które używa fragmentów, rozszerza się
FragmentActivity
zamiast zwykłegoActivity
,dostać
FragmentActivity
klasę.źródło
Wyjątek
android.view.InflateException: Binary XML file line: #... Error inflating class fragment
może się zdarzyć, jeśli manipulujeszgetActivity()
wewnątrz fragmentu, zanimonActivityCreated()
zostaniesz wywołany. W takim przypadku otrzymasz błędne odniesienie do działania i nie możesz na nim polegać.Na przykład następny wzór jest nieprawidłowy:
Prawidłowy wzór nr 1
Prawidłowy wzór nr 2
źródło
getActivity()
wewnątrzonActivityCreated()
lub w dowolnej kolejnej metodzie cyklu życia, ale przedonDestroyView()
.Upewnij się, że się
Activity
rozciągaFragmentActivity
.źródło
Miałem ten sam błąd. Kopałem cały dzień, nie wiem, ale myślę, że wypróbowałem ~ 25 rozwiązań tego problemu. Żadne nie działało, aż o 2 w nocy dowiedziałem się, że brakuje mi tego wiersza w pliku manifestu aplikacji xml:
Ta linia była wewnątrz
<application>
tagu. Mam nadzieję, że komuś to pomoże. GL.źródło
Miałem ten sam problem. Rozwiązaniem dla mnie była kolejność super.onCreate i setContentView w ramach FragmentActivity
Następująca kolejność działa dobrze:
źródło
super
musi być zawsze wywoływana na początku metody.super.method()
należy najpierw zadzwonić. To zależy od tego, co robi metoda superklasy. W takim przypadkuFragmentActivity
wykonuje jakąś inicjalizację potrzebną dosetContentView
poprawnego działania. Jednak w innej metodzie (powiedzmyonKeyUp
) możesz warunkowo wykonać jakąś pracę z akcją, alesuper.onKeyUp
w takim przypadku najprawdopodobniej będziesz chciał wywołaćsuper.onKeyUp
na samym końcu funkcji.super()
(konstruktor nadklasy) musi być pierwszą funkcją wywoływaną w jakimkolwiek konstruktorze klas potomnych, jednak wywołanie jej niekoniecznie jest obowiązkowe (zależałoby całkowicie od rozszerzanej klasy).Fragmentów nie można zagnieżdżać w formacie XML
Nauczyłem się tego na
<fragment>
własnej skórze - jeśli zagnieżdżasz tag oparty na układzie XML wewnątrz (potencjalnie) dynamicznie ładowanego fragmentu zFragmentManager
, zaczynasz otrzymywać dziwne błędy, próbując nadmuchać swój fragment xml.Okazuje się, że nie jest to obsługiwane - będzie działać dobrze, jeśli zrobisz to wyłącznie przez
FragmentManager
podejście.Pojawił się ten problem, ponieważ próbowałem załadować fragment wewnątrz a
<DrawerLayout>
z xml, a to powodowało awarięonCreateView()
metody, gdy zdejmowałem tylny stos.źródło
appcompat-v7:23.3.0
<fragment>
z<frameLayout>
działało. Wciąż to rozumiem. - stackoverflow.com/a/19167009/5477548Miałem ten sam problem, co ty. Żadna ze wskazówek na górze mi nie pomogła. Później stwierdziłem, że wszystko, co muszę zrobić, to naprawić import z:
do:
źródło
Czy próbowałeś:
źródło
Upewnij się, że w metodzie onCreateView fragmentu nie zgłoszono żadnego wyjątku. Jeśli jakikolwiek wyjątek zostanie zgłoszony w tej metodzie, logcat nie pokaże dokładnych szczegółów wyjątku, zamiast tego zawsze wyświetla komunikat:
źródło
Jeśli
TaskDetailsFragment
przedłużaszandroid.app.Fragment
, zmieńonCreateView()
.Zwróć widok, który chcesz pokazać we fragmencie lub przekonwertuj swój układ do widoku za pomocą LayoutInflater i zwróć go.
Mam nadzieję, że to zadziała. :)
źródło
Sprawdź ścieżkę klasy, może to być inflator widoku, który nie mógł znaleźć definicji klasy zgodnie z definicją w xml class = "de.androidbuch.activiti.task.TaskDetailsFragment". Powyższa ścieżka może być błędna.
źródło
Otrzymałem ten błąd z różnych powodów.
Kroki ku reprodukcji:
~> Moim problemem było to, że stworzyłem zupełnie nową, pustą aplikację.
~> Następnie wygenerowałem niestandardowy fragment z menu Plik ~> Nowy plik.
~> Kontynuowano dostosowywanie fragmentu, dodając układy i przyciski itp.
~> Odwołano się do nowego niestandardowego fragmentu w automatycznie wygenerowanym pliku activity_my.xml, który został wygenerowany dla mnie podczas tworzenia aplikacji. Dzięki temu XML mógł wygenerować dla mnie obiekty.
Herezje jest haczykiem podczas generowania niestandardowego fragmentu za pomocą menu Plik ~> Nowy plik, automatycznie generuje skrót funkcji interfejsu i umieszcza go na dole pliku klasy fragmentu.
Oznacza to, że klasa MyActivity musi implementować ten interfejs. Jeśli tak nie jest, powyższy błąd występuje tylko podczas odwoływania się do fragmentu z xml. Poprzez całkowite usunięcie odniesienia do fragmentu w kodzie XML i utworzenie fragmentu za pomocą kodu w pliku klasy MyActivity.java, Logcat generuje bardziej zwięzły błąd wyjaśniający szczegółowo problem i narzekający na interfejs. Jest to pokazane w działaniu szablonu projektu + fragment. Chociaż <~ ten szablon projektu nie generuje kodu pośredniczącego interfejsu.
źródło
Dla mnie to było po przewinięciu śladu stosu, stwierdziłem, że brakuje mi pozwolenia dla android.permission.ACCESS_NETWORK_STATE
po dodaniu tego uprawnienia zostało to naprawione
źródło
Jeśli masz oddzielne pliki układu dla trybów pionowego i poziomego i pojawia się błąd inflacji przy każdej zmianie orientacji po kliknięciu elementu, najprawdopodobniej istnieje rozbieżność między plikami układu.
Kiedy pojawia się błąd, czy dzieje się tak tylko wtedy, gdy klikniesz element w trybie poziomym, czy tylko w trybie pionowym, czy w obu? Czy Twoje działanie TaskDetailsFragment używa pliku układu, który może mieć rozbieżności między trybami poziomym i pionowym?
źródło
Jeśli dodajesz
Fragment
statycznie, to znaczy w xml, być może przegapiłeś implementacjęOnFragmentInteractionListener
w swojejActivity
klasie. Wtedy implementacja interfejsu rozwiązałaby problem. Jeśli dodajeszFragment
dynamicznie, czyli w klasie java, to nie jest to rozwiązanie. Ponieważ samo IDE nie pozwoli ci kontynuować bez implementacji wymaganych interfejsów.źródło
Moim problemem w tym przypadku był prosty przypadek posiadania głupiego wyjątku wskaźnika zerowego w jednej z moich metod, który był wywoływany później w cyklu życia. To powodowało dla mnie wyjątek „Błąd zawyżania fragmentu klasy”. Krótko mówiąc, pamiętaj, aby sprawdzić dalszy ślad stosu wyjątków pod kątem możliwej przyczyny.
Po rozwiązaniu wyjątku zerowego wskaźnika mój fragment został załadowany poprawnie.
źródło
Żadne z powyższych rozwiązań nie pomogło mi. W dzienniku mogłem znaleźć szczegóły wyjątku, jak wspomniano poniżej:
Zrobiłem to i mój kod działał!
źródło
Jeśli nie chcesz niczego zmieniać, idź z tagiem „ fragment ”
Zrób to,
źródło
Wystąpił ten sam typ błędu, w którym został wyświetlony dokładnie ten sam komunikat o błędzie w logcat. Musiałem wprowadzić zmiany w ścieżce budowania Java znajdującej się pod
Project->Properties
. Dołączyłem biblioteki powiązane z Mapami Google, takie jakandroid-support-v4.jar
igoogle-play-services.jar
; jednak brakowało mi włączania tych'Build class path'
w'Order and Export'
menu opcji. Może błąd leży tutaj.Spróbuj dołączyć biblioteki do ścieżki klasy kompilacji.
Kolejność, w jakiej budowane są klasy, może również wywołać błąd, więc radzę również spróbować zmienić kolejność ścieżki budowania. Błąd zniknął gdy użyłem następującej kolejności:
'my_project_name/src'->'my_project_name/gen'->'Android Private Libraries'
. Ostatnia jednostka zawiera wspomniane wcześniej pliki jar.źródło
W pliku xml po prostu użyj zamiast tagu. Inflater próbuje utworzyć fragment android.app.Fragment, z którego nie powiedzie się przy API <10. Musisz więc utworzyć grupę widoków innego typu.
źródło
Wystąpił ten błąd podczas korzystania z ListFragment, ale identyfikator widoku listy to listView1 zamiast listy.
Treść musi mieć ListView, którego atrybut id to „android.R.id.list”
http://developer.android.com/reference/android/app/ListFragment.html
źródło
upewnij się, że użyłeś tego
nie to..
źródło
Po prostu miał ten sam błąd. Powodem mojej była widoczność mojej klasy fragmentów. Został ustawiony jako domyślny, powinien być publiczny.
źródło
Czy mógłbyś opublikować fragment
onCreate
ionCreateView
metody? Miałem dokładnie ten sam wyjątek, który był spowodowany przez wyjątek wonCreate
metodzie fragmentu , kiedy naprawiłem ten problem, naprawiłem fragment klasy Error inflating.źródło
Otrzymałem ten błąd w Android Studio, problem polegał na tym, że mój fragment miał względny układ, podczas gdy kod funkcji OnCreateView był
czy twój kod robi to samo?
źródło
Jeśli chcesz, aby odziedziczyć AppCompatActivity , można zrobić coś jak to- W xml działalności, należy użyć FrameLayout jak to-
aw działalności
onCreate
-źródło
Otrzymałem ten sam błąd, ale moim problemem było to, że mój fragment nie miał identyfikatora w układzie xml działania nadrzędnego.
źródło
Po jednodniowej walce odkryłem, że możesz sprawdzić scenariusz,
Uwaga - nie dodawaj dwóch kluczy w pliku manifestu usuń klucz mapy
powyżej kodu i dodaj ten kod.
źródło
Miałem podobny problem; po uruchomieniu przykładu AdMob próbowałem wstawić reklamy do mojej aplikacji, powodując następujący błąd:
Rozwiązanie jest takie: nie możesz wstawić fragmentu reklamy do ListActivity. Zamiast tego mógłbym bez problemu dodać go do FragmentActivity i ActionBarActivity.
Moja sugestia jest taka: zacznij od przykładu AdMob i dodaj do niego swoją istniejącą aplikację: zaoszczędziłbym dużo czasu !!!
źródło
Jeśli używasz zaciemniania z komponentem nawigacji, musisz wykluczyć fragment Androida i swoje argumenty. Dodaj te wiersze do plików reguł proguard:
źródło