web-dev-qa-db-fra.com

SupportMapFragment ne prend pas en charge AndroidX Fragment

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

Ici, IDE indique une erreur que androidx.fragment.Fragment ne peut pas convertir en SupportMapFragment (qui étend Android.support.v4.app.Fragment)

J'utilise la version 15.0.1 de play-services-maps et la version 1.0.0-beta01 des bibliothèques AndroidX.

Je n'ai trouvé aucune mise à jour de SupportMapFragment après AndroidX dans les notes de publication: https://developers.google.com/maps/documentation/Android-sdk/releases

Edit: Avant que quiconque ne demande, form est une instance de la classe Form qui étend AppCompatActivity (à partir d'AndroidX)

15
Pavitra

Ce problème a déjà été signalé à Google dans l'outil de suivi des problèmes publics:

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

Je suggérerais de mettre en vedette la demande de fonctionnalité dans l'outil de suivi des problèmes du public afin d'ajouter votre vote et de vous abonner aux autres notifications de Google. Espérons que Google l'implémentera dans les prochaines versions du SDK Android Maps.

Mettre à jour

Google a fourni la réponse suivante dans l'outil de suivi des problèmes du public.

Salut à tous,

Comme indiqué, l'API Google Maps est actuellement basé sur les bibliothèques de support et non sur AndroidX. Les futures versions de Google Maps API prendront certainement en charge AndroidX, mais entre-temps, la solution de contournement suivante résoudra le problème pour vous:

  • Utiliser Android Studio 3.2 (aperçu actuellement) ou supérieur
  • Assurez-vous que votre build.gradle contient 'compileSdkVersion 28' (par défaut pour les nouveaux projets AS 3.2)
  • Incluez les éléments suivants dans votre fichier gradle.properties (valeur par défaut pour les nouveaux projets AS 3.2)

    Android.useAndroidX = true

    Android.enableJetifier = true

Enfin, pour le code existant référençant les bibliothèques de support, vous pouvez utiliser l'outil "Refactor -> Refactor to AndroidX" dans Android Studio 3.2+ pour convertir automatiquement votre code afin qu'il utilise les nouveaux packages AndroidX.

9
xomena

J'ai eu votre même problème, résolu en mettant à jour toutes les importations vers la dernière version disponible dans le fichier build.gradle et en ajoutant

Android.enableJetifier=true
Android.useAndroidX=true

Pour le gradle.properties

c'est la version du paquet de cartes que j'ai importé

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

Vous devez juste corriger certaines importations et ensuite vous avez terminé

J'espère

EDIT: même après avoir édité ce que je viens de dire, vous aurez toujours l’erreur montrée en Java mais elle compile et fonctionne sans erreur

EDIT2: hier, ils ont suggéré une solution de contournement pour le problème issuetracker https://issuetracker.google.com/issues/110573930#comment13

8
Marco Tondini

Ajoutez les derniers services de Google Map Play pour résoudre le problème.

implémentation 'com.google.Android.gms: play-services-maps: 16.0.0'

Les dernières versions de Google Play Services.

2

Android Jetifier n'a malheureusement pas fonctionné pour moi. J'ai résolu ce problème en copiant SupportMapFragment dans mon projet et en modifiant le parent. Au cours de cette procédure, j’ai également dû faire une copie de la classe appelée zzak (renommée SupportMapCallback).

Veuillez noter que vous devez considérer cette solution comme une cause temporaire car elle est indépendante des mises à jour de la bibliothèque Play Services. Si vous devez également migrer vers AndroidX dès que possible, n'hésitez pas à le récupérer à partir d'ici:

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

2
mroczis

Pour que cela fonctionne, vous devez être sur la version suivante ou supérieure:

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

Après avoir migré vers AndroidX, assurez-vous d'invalider les caches et redémarrez pour éliminer toutes les erreurs rouges sur les dépendances de Google Maps.

2
Mike

Vous devez mettre à jour la version Android Studio vers la version 3.2, il s'agit toujours d'une version bêta . Le problème est que la bibliothèque Google Maps utilise la classe Fragment de la bibliothèque de support, de sorte qu'elle est en conflit avec androidX. utiliser les classes androidX.

1
Mohamed ElSawaf

J'avais aussi ce problème… .. Ce n'est vraiment pas gentil, et bien sûr temporaire, mais c'était la seule façon pour moi de le faire fonctionner. Donc au moins ça m'a débloqué jusqu'à ce que ça soit réparé.

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

Cela fonctionne à la fois du compilateur et de l'exécution.

0
Krisztián Vizsy