Próbuję zrobić taki sam układ kart w Sklepie Play. Muszę wyświetlić układ zakładek za pomocą fragmentów i viewpagera z androidhive. Nie mogę jednak zaimplementować na nim map google v2 . Szukałem już w internecie godzinami, ale nie mogę znaleźć poradnika, jak to zrobić. Czy ktoś może mi pokazać, jak?
android
google-maps
android-fragments
Jeongbebs
źródło
źródło
Activity
iFragment
kiedyśgetChildFragmentManager()
.Odpowiedzi:
Używając tego kodu, możemy ustawić MapView w dowolnym miejscu, wewnątrz dowolnego ViewPagera lub fragmentu lub działania.
W najnowszej aktualizacji Google for Maps fragmenty są obsługiwane tylko przez MapView. MapFragment i SupportMapFragment nie działa. Mogę się mylić, ale to właśnie zobaczyłem po próbie implementacji MapFragment i SupportMapFragment.
Konfigurowanie układu do wyświetlania mapy w pliku
location_fragment.xml
:Teraz kodujemy klasę Java do wyświetlania mapy w pliku
MapViewFragment.java
:Na koniec musisz uzyskać klucz API dla swojej aplikacji, rejestrując ją w Google Cloud Console . Zarejestruj swoją aplikację jako natywną aplikację na Androida.
źródło
<uses-library android:name="com.google.android.maps" android:required="true" />
dotyczy Map V1, a nie Map V2. W przyszłości pojawią się urządzenia, które nie mającom.google.android.maps
biblioteki oprogramowania układowego, ale są w stanie doskonale wyświetlać mapy Maps V2. Posiadanie tego wiersza w manifeście uniemożliwi uruchomienie na takich urządzeniach, a ten wiersz nie jest wymagany do korzystania z Map V2. Na przykład 17 projektów na github.com/commonsguy/cw-omnibus/tree/master/MapsV2 nie ma tego<uses-library>
elementu i działa dobrze.java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.impl.bo.o()' on a null object reference
Poniższe podejście działa dla mnie.
fragment_location_info.xml
źródło
java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized
. Pomyślałem, że to try catch załatwi to. Czy ktoś może mi pomóc?mMapView
?getMap()
jest przestarzałe. Zamiast tego użyj getMapAsync i onMapReadyCallback: stackoverflow.com/a/31371953/4549776Możesz użyć tej linii, jeśli chcesz użyć
GoogleMap
we fragmencie:źródło
Najnowsze rzeczy z
getMapAsync
zamiast wycofanych.1. sprawdź manifest dla
Możesz uzyskać klucz API dla swojej aplikacji, rejestrując ją pod adresem
Google Cloud Console
. Zarejestruj swoją aplikację jako natywną aplikację na Androida2. w układzie fragmentów .xml dodaj FrameLayout (nie fragment):
lub dowolnej wysokości
3. W onCreateView w Twoim fragmencie
źródło
<fragment
zamiastFrameLayout
SupportMapFragment
naMapFragment
w działaniu, zmieniłemFrameLayout
nafragment
w pliku układu i zmieniłemcom.google.android.gms.maps.SupportMapFragment
nacom.google.android.gms.maps.MapFragment
to działa dobrze dla mnie. Przed tymi zmianami to nie działało. Może to pomoże innym…tutaj, co zrobiłem szczegółowo:
Stąd możesz pobrać klucz google map api
alternatywny i prosty sposób
najpierw zaloguj się na swoje konto Google i odwiedź biblioteki Google i wybierz Google Maps Android API
zależność znaleziona w domyślnej aktywności mapy Android Studio:
umieść swój klucz w pliku mainifest Androida w aplikacji, jak poniżej
w AndroidMainifest.xml wprowadź następujące zmiany:
Kod fragmentu:
w tobie fragment xml:
źródło
W celu uzyskania a,
NullPointerException
gdy zmieniamy Tabs w aFragmentTabHost
, wystarczy dodać ten kod do swojej klasy, która ma rozszerzenieTabHost
. Mam na myśli klasę, w której inicjalizujesz karty. To jest kod:źródło
we fragment_layout
źródło
Po dodaniu mapy użyj:
zamiast
.add
i zamiastgetFragmentManager
.źródło
po prostu tworzę MapActivity i nadymam go do fragmentacji. MapActivity.java:
activity_map.xml:
MapFragment.java:-
źródło
Mam obejście problemu,
NullPointerException
gdy usuwasz fragment w onDestoryView
, po prostu umieść kod wonStop()
nieonDestoryView
. To działa dobrze!źródło
Zgodnie z https://developer.android.com/about/versions/android-4.2.html#NestedFragments możesz użyć zagnieżdżonych fragmentów, aby to osiągnąć, wywołując getChildFragmentManager (), jeśli nadal chcesz używać fragmentu Map Google zamiast zobacz wewnątrz własnego fragmentu:
gdzie „treść” to układ główny w Twoim fragmencie (najlepiej FrameLayout). Zaletą korzystania z fragmentu mapy jest to, że wtedy cykl życia mapy jest zarządzany automatycznie przez system.
Chociaż w dokumentacji jest napisane: „Nie można nadmuchać układu do fragmentu, gdy ten układ zawiera <fragment>. Zagnieżdżone fragmenty są obsługiwane tylko wtedy, gdy są dynamicznie dodawane do fragmentu.”, Jakoś udało mi się to zrobić i działa dobrze. Oto mój kod:
W metodzie onCreateView () fragmentu:
W układzie:
Mam nadzieję, że to pomoże!
źródło
Dynamiczne dodawanie fragmentu mapy do przeglądania pagera:
Jeśli celujesz w aplikację wcześniejszą niż poziom API 12, utwórz wystąpienie SupportedMapFragment i dodaj ją do adaptera strony widoku.
Poziom API 12 lub wyższy obsługuje obiekty MapFragment
źródło
To jest sposób Kotlina:
W
fragment_map.xml
powinieneś mieć:W swoim
MapFragment.kt
powinieneś mieć:Zadzwoń
setupMap()
wonCreateView
.źródło