Błąd podczas pompowania fragmentu klasy

161

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
tsync
źródło
Czy przechowujesz oddzielne pliki układu w folderach układu i obszaru układu?
Nathan Fig
Czy możesz podać pełny dziennik błędów, w tym wiersze po komunikacie „Nie można rozpocząć działania ...”
Dave,
@Nathan Fig: tak, tak ... ale otrzymuję błędy ...
tsync
@Dave: zaczynasz .. masz jakiś pomysł?
tsync
Potrzebujesz kodu układu poziomego, a także pomocne byłyby wywołania setContentView, a także sposób, w jaki odpalasz aktywność w trybie pionowym, tak jak zakładam. W tej chwili nie ma wystarczających informacji. Spojrzenie na przykład FragmentLayout w demonstracjach API może ci pomóc, ponieważ wygląda na to, że robisz coś podobnego.
PJL

Odpowiedzi:

131

Jak powiedział hdemirchian, upewnij się, że używasz:

import android.support.v4.app.Fragment;

Upewnij się również, że działanie, które używa fragmentów, rozszerza się FragmentActivityzamiast zwykłego Activity,

import android.support.v4.app.FragmentActivity;

dostać FragmentActivityklasę.

Dandre Allison
źródło
12
To spotkało się z dużym uznaniem, ale dla mnie zawiesza się podczas wznawiania aplikacji, a ja już używam fragmentów wersji 4 i FrsgementActivity w wersji 4 - a dokładniej AppCompatActivity.
joseph
4
To nie jest rozwiązanie. import android.support.v4.app.Fragment; niczego nie zmienia. W rzeczywistości jest to nawet niewykorzystany i niepotrzebny import.
f470071
7
Dzięki, na marginesie jest to, że AppCompatActivity jest potomkiem FragmentActivity.
abedfar
ale używam fragmentu sztyletu, a fragment sztyletu zawsze rozszerza aktywność fragmentu, a nie fragmentu
użytkownik3475052
96

Wyjątek android.view.InflateException: Binary XML file line: #... Error inflating class fragmentmoże się zdarzyć, jeśli manipulujesz getActivity()wewnątrz fragmentu, zanim onActivityCreated()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:

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

Prawidłowy wzór 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;
}

Prawidłowy wzór nr 2

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    Button button = getActivity().findViewById(R.id...);
    button.setOnClickListener(...);
}
Grigorij A.
źródło
@MaximKorobov Możesz wywołać getActivity()wewnątrz onActivityCreated()lub w dowolnej kolejnej metodzie cyklu życia, ale przed onDestroyView().
Grigori A.
Wielkie dzięki, to bardzo pomogło!
Shotgun Ninja
Dzięki :-) zaoszczędziło mi to dużo czasu :)
user1007522
Chciałbym dowiedzieć się więcej na ten temat, mam sporadyczną awarię i myślę, że to może być problem. Chociaż przez większość czasu kod działa dobrze, więc trudno to wiedzieć
Daniel Wilson
Wzór 2 mógł rozwiązać to za mnie. Skrzyżowane palce. Dziękuję za to.
joseph
36

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:

<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />

Ta linia była wewnątrz <application>tagu. Mam nadzieję, że komuś to pomoże. GL.

Matiss
źródło
3
Mój bohater. Ludzie tacy jak Ty sprawiają, że są TAKIE wspaniali!
capdragon
5
Wyjaśnij, co się dzieje, proszę. Jakie są zalety tej linii?
Mansour Fahad
2
Dzięki, uratuj mój dzień. Każda próbka korzystania z mapy Google na Androidzie działa inaczej, zastanawiam się, czy istnieje standard.
user2812866
22

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:

    super.onCreate(savedInstanceState);
    setContentView(R.layout.fc_activity_list_profiles);
Wilko
źródło
3
Dlaczego to rozwiązuje problem?
Spencer,
1
W metodzie JAVA supermusi być zawsze wywoływana na początku metody.
Stéphane Bruckert
11
@ StéphaneBruckert nie zawsze jest tak, że super.method()należy najpierw zadzwonić. To zależy od tego, co robi metoda superklasy. W takim przypadku FragmentActivitywykonuje jakąś inicjalizację potrzebną do setContentViewpoprawnego działania. Jednak w innej metodzie (powiedzmy onKeyUp) możesz warunkowo wykonać jakąś pracę z akcją, ale super.onKeyUpw takim przypadku najprawdopodobniej będziesz chciał wywołać super.onKeyUpna samym końcu funkcji.
CoatedMoose
Prawdopodobnie warto również zauważyć, że 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).
CoatedMoose,
17

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 z FragmentManager, 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 FragmentManagerpodejś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.

Dhiraj Gupta
źródło
Czy to nadal nie jest obsługiwane? Stan naappcompat-v7:23.3.0
thanassis
tak zagnieżdżam fragment w xml. Przyjrzę się temu.
KDeogharkar
Ale istnieją rozwiązania / hacki dla tego problemu: stackoverflow.com/a/14695397/860488
Morten Holmgaard
2
Zapoznaj się z uwagą na końcu tej sekcji, aby uzyskać potwierdzenie: developer.android.com/about/versions/ ...
Philippe
nie wiem, dlaczego rozwiązanie jest tak proste. dla mnie, po prostu zastępując <fragment>z <frameLayout>działało. Wciąż to rozumiem. - stackoverflow.com/a/19167009/5477548
yoad w
16

Miał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:

import android.app.Fragment;

do:

import android.support.v4.app.Fragment;
hdemirchian
źródło
Dzięki, to rozwiązanie też zadziałało. Zmagałem się z tym problemem przez 2 dni. W końcu twoje rozwiązanie zadziałało. Dzięki hdemirchian ..
Lakshmanan
Jesteś niesamowity! Mój problem był odwrotny - kreator fragmentów domyślnie importuje android.support.v4.app.Fragment. A moja główna działalność to rozszerzenie android.app.Activity.
Industrial Control Freak
12

Czy próbowałeś:

 <fragment
            android:name="de.androidbuch.activiti.task.TaskDetailsFragment"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
Blundell
źródło
1
Pokazałeś nam 1 plik xml, ale powinieneś mieć 2 jeden w / layout / i jeden w layout-land /
Blundell,
12

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:

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)
Lei
źródło
Aby dodać to, o czym mówi Lei, spróbuj złapać kod w swoim oncreateview i znajdź rzeczywistą główną przyczynę. Dzięki Lei!
Swaroop,
6

Jeśli TaskDetailsFragmentprzedłużasz android.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.

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

Mam nadzieję, że to zadziała. :)

Suryavel TR
źródło
6

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.

maska
źródło
6

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.

xMythicx
źródło
5

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

Gil
źródło
1
Nie dla siebie: „przewijaj cały ślad stosu. Dziękuję @Gil.
Batandwa,
4

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?

Nathan Rys
źródło
Dziękuję za odpowiedź… cóż, mam tylko fragment w trybie poziomym a nie w trybie portretowym. Mogę więc kliknąć tylko w trybie poziomym, aby zobaczyć fragment. I po ponownym przełączeniu do trybu
poziomego pojawia
To prawie na pewno problem - masz widok w trybie portretowym, którego nie można znaleźć w trybie poziomym. Czy dodanie fragmentu do krajobrazu rozwiązuje problem?
Nathan Fig
1
Możesz mieć widoki, które nie istnieją w obu plikach - o to chodzi w oddzielnych układach -land i -port. Jednak sprawdź identyfikatory - brakowało mi identyfikatora w pliku portretu i otrzymywałem ten błąd podczas przełączania.
maxpolun
4

Jeśli dodajesz Fragmentstatycznie, to znaczy w xml, być może przegapiłeś implementację OnFragmentInteractionListenerw swojej Activityklasie. Wtedy implementacja interfejsu rozwiązałaby problem. Jeśli dodajesz Fragmentdynamicznie, czyli w klasie java, to nie jest to rozwiązanie. Ponieważ samo IDE nie pozwoli ci kontynuować bez implementacji wymaganych interfejsów.

Shaheer Palollathil
źródło
3

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.

dziwomierz
źródło
3

Żadne z powyższych rozwiązań nie pomogło mi. W dzienniku mogłem znaleźć szczegóły wyjątku, jak wspomniano poniżej:

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.

Zrobiłem to i mój kod działał!

<meta-data  android:name="com.google.android.maps.v2.API_KEY" android:value="AIzaSyCl1yGPZ3mpxxxxxxxAz2R-t7zcWVzrHUL9k"/>
</application>
Khushboo
źródło
3

Jeśli nie chcesz niczego zmieniać, idź z tagiem „ fragment

Zrób to,

<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)
 />
Sahaj Rana
źródło
2

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 jak android-support-v4.jari google-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.

Christian Bøge-Rasmussen
źródło
1

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.

Lucas de Mon
źródło
1

upewnij się, że użyłeś tego

<meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="AIzaSyBEwmfL0GaZmdVqdTxxxxxxxx-rVgvY" />

nie to..

<meta-data 
         android:name="com.google.android.gms.version" 
          android:value="AIzaSyBEwmfL0GaZmdVqdTCvxxxxxxx-rVgvY" /> 
DjP
źródło
1

Po prostu miał ten sam błąd. Powodem mojej była widoczność mojej klasy fragmentów. Został ustawiony jako domyślny, powinien być publiczny.

Southerton
źródło
1

Czy mógłbyś opublikować fragment onCreatei onCreateViewmetody? Miałem dokładnie ten sam wyjątek, który był spowodowany przez wyjątek w onCreatemetodzie fragmentu , kiedy naprawiłem ten problem, naprawiłem fragment klasy Error inflating.

AdamVe
źródło
1

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ł

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

czy twój kod robi to samo?

Ahmad Moussa
źródło
1

Jeśli chcesz, aby odziedziczyć AppCompatActivity , można zrobić coś jak to- W xml działalności, należy użyć FrameLayout jak to-

<FrameLayout
    android:id="@+id/result_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_below="@+id/progress_frame"/>

aw działalności onCreate-

final FragmentManager supportFragmentManager = getSupportFragmentManager();
    FragmentTransaction ft = supportFragmentManager.beginTransaction();
    ft.replace(R.id.result_fragment, fphResultActivityFragment, "result fragment");
    ft.commitAllowingStateLoss();
Vaibhav Sharma
źródło
Dzięki, pomogło. Nie jestem pewien, dlaczego udało mi się z powodzeniem użyć <fragment> w moim układzie w innych aplikacjach, nad którymi pracowałem, ale tutaj nie działało!
SingularityFuture
po prostu zauważ, że to może działać, ale zwykle dotyczy to fragmentów dynamicznych, a nie statycznych
Tanner Summers,
1

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.

stevethecollier
źródło
1

Po jednodniowej walce odkryłem, że możesz sprawdzić scenariusz,

Jeśli wszystko działa tak samo jak kod Google, sprawdź plik manifestu w moim przypadku dodałem klucz geograficzny i klucz mapy, dlatego występuje wyjątek,

Uwaga - nie dodawaj dwóch kluczy w pliku manifestu usuń klucz mapy

meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="@string/google_maps_key"/>

powyżej kodu i dodaj ten kod.

 <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"/>
Yogesh Rathi
źródło
1

Miałem podobny problem; po uruchomieniu przykładu AdMob próbowałem wstawić reklamy do mojej aplikacji, powodując następujący błąd:

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

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 !!!

user2270629
źródło
1

Jeśli używasz zaciemniania z komponentem nawigacji, musisz wykluczyć fragment Androida i swoje argumenty. Dodaj te wiersze do plików reguł proguard:

# Exclude the fragments and argType for navigation component.
-keep class * extends androidx.fragment.app.Fragment{}
-keep class com.safetonet.presentation.features.parent.adddevice.model.PresentableAddDeviceData
user3193413
źródło