J'essaie de faire une mise en page des onglets de la même manière dans Play Store. J'ai pu afficher la mise en page de l' onglet en utilisant des fragments et un viewpager d'Androidhive. Cependant, je ne peux pas implémenter google maps v2 dessus. J'ai déjà cherché sur Internet pendant des heures, mais je ne trouve pas de tutoriel sur la façon de le faire. Quelqu'un peut-il me montrer comment?
android
google-maps
android-fragments
Jeongbebs
la source
la source
Activity
etFragment
une fois agetChildFragmentManager()
été utilisé.Réponses:
En utilisant ce code, nous pouvons configurer MapView n'importe où, à l'intérieur de n'importe quel ViewPager, Fragment ou Activity.
Dans la dernière mise à jour de Google pour Maps, seul MapView est pris en charge pour les fragments. MapFragment & SupportMapFragment ne fonctionne pas. Je me trompe peut-être, mais c'est ce que j'ai vu après avoir essayé d'implémenter MapFragment & SupportMapFragment.
Configuration de la mise en page pour afficher la carte dans le fichier
location_fragment.xml
:Maintenant, nous codons la classe Java pour afficher la carte dans le fichier
MapViewFragment.java
:Enfin, vous devez obtenir la clé API de votre application en enregistrant votre application sur Google Cloud Console . Enregistrez votre application en tant qu'application Android native.
la source
<uses-library android:name="com.google.android.maps" android:required="true" />
est pour Maps V1, pas pour Maps V2. Il y aura à l'avenir des appareils qui ne disposeront pas de lacom.google.android.maps
bibliothèque de micrologiciels mais qui seront parfaitement capables d'afficher des cartes Maps V2. Avoir cette ligne dans votre manifeste vous empêchera de fonctionner sur de tels appareils, et cette ligne n'est pas requise pour l'utilisation de Maps V2. Par exemple, les 17 projets sur github.com/commonsguy/cw-omnibus/tree/master/MapsV2 n'ont pas cet<uses-library>
élément et fonctionnent correctement .java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.impl.bo.o()' on a null object reference
L'approche suivante fonctionne pour moi.
fragment_location_info.xml
la source
java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized
. Je pensais que le try catch s'occuperait de cela. Est-ce que quelqu'un peut m'aider?mMapView
?getMap()
est obsolète. Utilisez plutôt getMapAsync et onMapReadyCallback: stackoverflow.com/a/31371953/4549776Vous pouvez utiliser cette ligne si vous souhaitez utiliser
GoogleMap
dans un fragment:la source
Dernières trucs avec
getMapAsync
au lieu de celui obsolète.1. vérifier le manifeste pour
Vous pouvez obtenir la clé API de votre application en enregistrant votre application sur
Google Cloud Console
. Enregistrez votre application en tant qu'application Android native2. dans votre mise en page de fragment .xml, ajoutez FrameLayout (pas fragment):
ou quelle que soit la hauteur que vous voulez
3. Dans onCreateView dans votre fragment
la source
<fragment
au lieu deFrameLayout
SupportMapFragment
enMapFragment
dans l'activité, changé leFrameLayout
enfragment
dans le fichier de mise en page et et changé lecom.google.android.gms.maps.SupportMapFragment
encom.google.android.gms.maps.MapFragment
cela fonctionne très bien pour moi. Avant ces changements, cela ne fonctionnait pas. Peut-être que cela aide les autres ....voici ce que j'ai fait en détail:
De là, vous pouvez obtenir la clé API google map
manière alternative et simple
connectez-vous d'abord à votre compte Google, visitez les bibliothèques Google et sélectionnez l'API Google Maps Android
dépendance trouvée dans l'activité de la carte par défaut du studio android:
mettez votre clé dans le fichier mainifest android sous l'application comme ci-dessous
dans AndroidMainifest.xml apportez ces modifications:
Code de fragment:
dans votre fragment xml:
la source
Pour le problème d'obtenir un
NullPointerException
lorsque nous changeons les onglets dans un, ilFragmentTabHost
vous suffit d'ajouter ce code à votre classe qui a l'extensionTabHost
. Je veux dire la classe où vous initialisez les onglets. Voici le code:la source
dans fragment_layout
la source
Lorsque vous ajoutez votre carte, utilisez:
au lieu de
.add
et au lieu degetFragmentManager
.la source
Je viens de créer MapActivity et de le gonfler pour le fragmenter. MapActivity.java:
activity_map.xml:
MapFragment.java:-
la source
J'ai une solution de contournement pour
NullPointerException
supprimer le fragmentDestoryView
, il suffit de mettre votre codeonStop()
nononDestoryView
. Ça fonctionne bien!la source
Selon https://developer.android.com/about/versions/android-4.2.html#NestedFragments , vous pouvez utiliser des fragments imbriqués pour y parvenir en appelant getChildFragmentManager () si vous souhaitez toujours utiliser le fragment Google Maps au lieu du voir à l'intérieur de votre propre fragment:
où "content" est la mise en page racine de votre fragment (de préférence un FrameLayout). L'avantage d'utiliser un fragment de carte est qu'alors le cycle de vie de la carte est géré automatiquement par le système.
Bien que la documentation dise "Vous ne pouvez pas gonfler une mise en page en un fragment lorsque cette mise en page comprend un <fragment>. Les fragments imbriqués ne sont pris en charge que lorsqu'ils sont ajoutés dynamiquement à un fragment.", J'ai réussi, d'une manière ou d'une autre, et cela a bien fonctionné. Voici mon code:
Dans la méthode onCreateView () du fragment:
Dans la mise en page:
J'espère que ça aide!
la source
Ajout dynamique d'un fragment de carte pour afficher le téléavertisseur:
Si vous ciblez une application antérieure au niveau d'API 12, créez une instance de SupportedMapFragment et ajoutez-la à votre adaptateur de page d'affichage.
API de niveau 12 ou supérieur prend en charge les objets MapFragment
la source
C'est la manière Kotlin:
En
fragment_map.xml
vous devriez avoir:Dans votre
MapFragment.kt
vous devriez avoir:Appel
setupMap()
àonCreateView
.la source