it-swarm.com.de

SupportMapFragment unterstützt kein AndroidX-Fragment

import com.google.Android.gms.maps.SupportMapFragment;
import androidx.fragment.Fragment;
...
private SupportMapFragment mMapFragment;
...
mMapFragment = (SupportMapFragment) form.getSupportFragmentManager().findFragmentByTag(MAP_FRAGMENT_TAG);

Hier zeigt die IDE einen Fehler, den androidx.fragment.Fragment nicht in SupportMapFragment konvertieren kann (wodurch Android.support.v4.app.Fragment erweitert wird)

Ich verwende die Version 15.0.1 der play-services-maps und die Version 1.0.0-beta01 der AndroidX-Bibliotheken.

Ich habe in den Versionshinweisen keine Updates für SupportMapFragment after AndroidX gefunden: https://developers.google.com/maps/documentation/Android-sdk/releases

Bearbeiten: Bevor jemand fragt, ist form eine Instanz der Form-Klasse, die AppCompatActivity (von AndroidX) erweitert.

15
Pavitra

Dieses Problem wurde bereits im öffentlichen Issue-Tracker an Google gemeldet:

https://issuetracker.google.com/issues/110573930

Ich würde vorschlagen, die Feature-Anfrage im öffentlichen Issue-Tracker zu markieren, um Ihre Stimme hinzuzufügen und weitere Benachrichtigungen von Google zu abonnieren. Hoffentlich wird Google es in den nächsten Versionen von Android Maps SDK implementieren.

Aktualisieren

Google hat im öffentlichen Issue-Tracker folgende Antwort bereitgestellt:

Hallo zusammen,

Wie bereits erwähnt, basiert das Google Maps-API derzeit auf den Unterstützungsbibliotheken und nicht auf AndroidX. Zukünftige Versionen von Google Maps API werden AndroidX sicherlich unterstützen. In der Zwischenzeit wird das Problem jedoch durch die folgende Problemumgehung behoben:

  • Verwenden Sie Android Studio 3.2 (derzeit Vorschau) oder höher
  • Stellen Sie sicher, dass Ihr build.gradle 'compileSdkVersion 28' enthält (Standard für neue AS 3.2-Projekte).
  • Fügen Sie Folgendes in die Datei gradle.properties ein (Standard für neue AS 3.2-Projekte).

    Android.useAndroidX = true

    Android.enableJetifier = true

Bei vorhandenem Code, der auf die Support-Bibliotheken verweist, können Sie das Tool "Refactor -> Refactor to AndroidX" in Android Studio 3.2+ verwenden, um den Code automatisch in die neuen AndroidX-Pakete zu konvertieren.

9
xomena

Ich hatte das gleiche Problem, behoben durch Aktualisieren aller Importe auf die letzte verfügbare Version in der Datei build.gradle und Hinzufügen

Android.enableJetifier=true
Android.useAndroidX=true

Zu den gradle.properties

dies ist die Version des Kartenpakets, das ich importiert habe

implementation 'com.google.Android.gms:play-services-maps:15.0.1'

Sie müssen nur einige Importe korrigieren und dann sind Sie fertig

Ich hoffe

BEARBEITEN: Auch wenn Sie das, was ich gerade gesagt habe, bearbeiten, wird der Fehler immer noch in Java angezeigt, aber er wird kompiliert und läuft ohne Fehler

EDIT2: Gestern wurde ein Workaround für den issuetracker vorgeschlagen https://issuetracker.google.com/issues/110573930#comment13

8
Marco Tondini

Schließlich ist hier die perfekte Antwort

1 . Hinzufügen

Android.enableJetifier=true
Android.useAndroidX=true

Zu den gradle.properties

2 . Mit Android Studio 3.2 höher) migrieren Sie Ihr Projekt auf AndroidX und wählen Refactor> Auf AndroidX migrieren aus der Menüleiste

3 . (Das Wichtigste) Einige Ihrer Projektimporte (in Klassen verwendet) müssen durch entsprechende AndroidX-Bibliotheken ersetzt werden. Hier Sie können Bibliotheken und ihre Entsprechungen finden. Ersetzen Sie sie einfach. Fertig, es kann losgehen :-)

3
Asad Khan

Fügen Sie die neuesten Google Map Play-Dienste hinzu, um das Problem zu lösen.

implementierung "com.google.Android.gms: play-services-maps: 16.0.0"

Google Play Services neueste Versionen.

2

Android Jetifier hat bei mir leider nicht funktioniert. Ich habe dieses Problem gelöst, indem Sie SupportMapFragment in mein Projekt kopiert und das übergeordnete Element geändert haben. Während dieser Prozedur musste ich auch eine Kopie der Klasse namens zzak erstellen (umbenannt in SupportMapCallback).

Bitte beachten Sie, dass Sie diese Lösung als temporäre Ursache verwenden sollten, da sie von den Aktualisierungen der Play Services-Bibliothek unabhängig ist. Wenn Sie auch so schnell wie möglich zu AndroidX migrieren müssen, können Sie es hier abrufen:

https://Gist.github.com/mroczis/3988e390a8b04fad3c8714181718cd60

2
mroczis

Damit dies funktioniert, müssen Sie sich in der folgenden Version oder höher befinden:

com.google.Android.gms:play-services-maps:16.0.0

Nach der Migration zu AndroidX müssen Sie die Caches ungültig machen und neu starten, um alle roten Fehler in den Google Maps-Abhängigkeiten zu beseitigen.

2
Mike

Sie müssen die Android-Studio-Version auf mehr als 3.2 aktualisieren. Es handelt sich immer noch um eine Beta-Version .. Das Problem ist, dass die Google Maps-Bibliothek die Fragment-Klasse aus der Support-Bibliothek verwendet androidX-Klassen verwenden.

1
Mohamed ElSawaf

Ich hatte auch diese Ausgabe ... Es ist wirklich nicht schön und zwar temporär, aber nur so konnte ich es schaffen. So hat es mich zumindest freigegeben, bis es behoben ist.

    final Object mf = getChildFragmentManager().findFragmentById(R.id.map);
    if (mf instanceof SupportMapFragment) {
        final SupportMapFragment smf = (SupportMapFragment) mf;
        // ...
    } else {
        //handle
    }

Es funktioniert sowohl Compilerzeit als auch Laufzeit.

0

Seien Sie vorsichtig, bei 'com.google.Android.gms: play-services-maps: 16.1.0' schlägt dies erneut fehl. Halten Sie sich an die Version 16.0.0, bis dieser Fehler in zukünftigen Versionen behoben ist.

0
vikir789

Ich habe gerade die neueste Version von Play-Services-Maps im Grade-App-Modul wie folgt implementiert:

**

implementierung 'com.google.Android.gms: play-services-maps: 17.0.0'

**

0