Ich versuche, im Play Store ein Tab-Layout zu erstellen. Ich muss das Tab-Layout mit Fragmenten und Viewpager von androidhive anzeigen. Ich kann Google Maps v2 jedoch nicht darauf implementieren . Ich habe bereits stundenlang im Internet gesucht, aber ich kann kein Tutorial dazu finden. Kann mir bitte jemand zeigen wie?
android
google-maps
android-fragments
Jeongbebs
quelle
quelle
Activity
undFragment
einmalgetChildFragmentManager()
verwendet.Antworten:
Mit diesem Code können wir MapView überall in jedem ViewPager, Fragment oder jeder Aktivität einrichten.
Im neuesten Update von Google for Maps wird nur MapView für Fragmente unterstützt. MapFragment & SupportMapFragment funktioniert nicht. Ich könnte mich irren, aber das habe ich gesehen, nachdem ich versucht habe, MapFragment & SupportMapFragment zu implementieren.
Einrichten des Layouts für die Anzeige der Karte in der Datei
location_fragment.xml
:Jetzt codieren wir die Java-Klasse zum Anzeigen der Karte in der Datei
MapViewFragment.java
:Schließlich müssen Sie den API-Schlüssel für Ihre App erhalten, indem Sie Ihre App bei Google Cloud Console registrieren . Registrieren Sie Ihre App als native Android App.
quelle
<uses-library android:name="com.google.android.maps" android:required="true" />
ist für Karten V1, nicht für Karten V2. In Zukunft wird es Geräte geben, die nicht über diecom.google.android.maps
Firmware-Bibliothek verfügen, aber perfekt in der Lage sind, Maps V2-Maps anzuzeigen. Wenn Sie diese Zeile in Ihrem Manifest haben, können Sie sie nicht auf solchen Geräten ausführen. Diese Zeile ist für die Verwendung von Maps V2 nicht erforderlich. Zum Beispiel haben die 17 Projekte unter github.com/commonsguy/cw-omnibus/tree/master/MapsV2 dieses<uses-library>
Element nicht und funktionieren einwandfrei.java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.impl.bo.o()' on a null object reference
Der folgende Ansatz funktioniert für mich.
fragment_location_info.xml
quelle
java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized
. Ich dachte, dass der Versuch Fang dafür sorgen würde. Kann mir jemand helfen?mMapView
?getMap()
ist veraltet. Verwenden Sie stattdessen getMapAsync und onMapReadyCallback: stackoverflow.com/a/31371953/4549776Sie können diese Zeile verwenden, wenn Sie sie
GoogleMap
in einem Fragment verwenden möchten :quelle
Neueste Sachen mit
getMapAsync
anstelle der veralteten.1. Manifest auf prüfen
Sie können den API-Schlüssel für Ihre App erhalten, indem Sie Ihre App unter registrieren
Google Cloud Console
. Registrieren Sie Ihre App als native Android App2. Fügen Sie in Ihrem Fragment-Layout .xml FrameLayout (kein Fragment) hinzu:
oder welche Höhe du willst
3. In onCreateView in Ihrem Fragment
quelle
<fragment
stattFrameLayout
SupportMapFragment
inMapFragment
in der Aktivität geändert habe, habe ich dasFrameLayout
infragment
in der Layoutdatei geändert und dascom.google.android.gms.maps.SupportMapFragment
in geändertcom.google.android.gms.maps.MapFragment
, funktioniert es gut für mich. Vor diesen Änderungen hat es nicht funktioniert. Vielleicht hilft das anderen ...hier was ich im detail gemacht habe:
Von hier aus können Sie den Google Map API-Schlüssel erhalten
alternativer und einfacher Weg
Melden Sie sich zuerst in Ihrem Google-Konto an, besuchen Sie die Google-Bibliotheken und wählen Sie die Google Maps Android-API aus
Abhängigkeit in Android Studio Standard-Kartenaktivität gefunden:
Legen Sie Ihren Schlüssel in die Android Mainifest-Datei unter Anwendung wie unten
Nehmen Sie in AndroidMainifest.xml folgende Änderungen vor:
Fragmentcode:
in dir fragment xml:
quelle
Für das Problem, eine zu erhalten,
NullPointerException
wenn wir die Registerkarten in einer ändern,FragmentTabHost
müssen Sie diesen Code nur zu Ihrer Klasse hinzufügen, die die hatTabHost
. Ich meine die Klasse, in der Sie die Registerkarten initialisieren. Dies ist der Code:quelle
in fragment_layout
quelle
Wenn Sie Ihre Karte hinzufügen, verwenden Sie:
statt
.add
und stattgetFragmentManager
.quelle
Ich erstelle MapActivity und blase es auf, um es zu fragmentieren. MapActivity.java:
activity_map.xml:
MapFragment.java:-
quelle
Ich habe eine Problemumgehung für das
NullPointerException
Entfernen von Fragmenten inDestoryView
. Geben Sie einfach Ihren CodeonStop()
nicht einonDestoryView
. Es funktioniert gut!quelle
Laut https://developer.android.com/about/versions/android-4.2.html#NestedFragments können Sie verschachtelte Fragmente verwenden , um dies zu erreichen, indem Sie getChildFragmentManager () aufrufen, wenn Sie weiterhin das Google Maps-Fragment anstelle von verwenden möchten Blick in dein eigenes Fragment:
Dabei ist "Inhalt" das Stammlayout in Ihrem Fragment (vorzugsweise ein FrameLayout). Der Vorteil der Verwendung eines Kartenfragments besteht darin, dass der Kartenlebenszyklus dann automatisch vom System verwaltet wird.
Obwohl in der Dokumentation steht "Sie können ein Layout nicht in ein Fragment aufblasen, wenn dieses Layout ein <Fragment> enthält. Verschachtelte Fragmente werden nur unterstützt, wenn sie dynamisch zu einem Fragment hinzugefügt werden.", Aber ich habe dies irgendwie erfolgreich durchgeführt und es hat gut funktioniert. Hier ist mein Code:
In der onCreateView () -Methode des Fragments:
Im Layout:
Ich hoffe es hilft!
quelle
Dynamisches Hinzufügen eines Kartenfragments zum Anzeigen von Pager:
Wenn Sie auf eine Anwendung vor API Level 12 abzielen, erstellen Sie eine Instanz von SupportedMapFragment und fügen Sie sie Ihrem Ansichtsseitenadapter hinzu.
API Level 12 oder höher unterstützen MapFragment-Objekte
quelle
Dies ist der Kotlin-Weg:
In
fragment_map.xml
sollten Sie haben:In Ihrem
MapFragment.kt
sollten Sie haben:Rufen Sie
setupMap()
anonCreateView
.quelle