Mapa v2 SupportMapFragment wewnątrz Viewpager
tło
Udało mi się dodać nową mapę api v2.0 do ViewPager, a mapa ładuje się dobrze. Używam FragmentViewPager. Wpadam w kłopoty, jednak gdy próbuję dodać znaczniki, ponieważ nie mogę uzyskać fragmentu za pomocą tagu jako ViewPager, którego używam, pochodzi z biblioteki kompatybilności i jest zdefiniowany w XML, a to „ukrywa” znacznik przed mną.
Pytanie
Jak mogę załadować nową mapę v2 ze znacznikamiSupportMapFragment
w aViewPager
który używa aFragmentPagerAdapter
.
Moja próba
Więc w mojej niewinności pomyślałem, że mogę stworzyć eleganckie rozwiązanie, rozszerzając SupportMapFragment na nową klasę, która wykonuje następujące czynności:
Dodaj nowego konstruktora, który zajmieGoogleMapOptions
iList<MarkerOptions>
. To skutecznie wywołuje istniejącego konstruktora, który właśnie bierzeGoogleMapsOptions
a następnie zapisz moją listę znaczników w prywatnej własności nowej klasy.NadpisanieGetMap()
- sprawdź, czy jest pusta i czy nie jest dodawana znaczników do mapy, którą wczytaliśmy wcześniej na mapę i na koniec ją zwrócimy.Myślałem, że moje rozszerzenie może być bardzo przydatne do wielokrotnego użytku i abstrahuje cokolwiek związane z mapą jednego miejsca i pozwala moim działaniom tworzyć nową MapFragment wedługnewInstance(myGoogleMapOptions, myMarkers)
.
Ok więc problem. Część 1 wydaje się działać dobrze, jednak podczas debugowania nie można uzyskać nadpisanej metody GetMap (). W rzeczywistości próbowałem przesłonić większość zwykłych metod, które mają fragmenty i żaden z nich nie został wywołany. Czy dzieje się coś dziwnego z SupportMapFragmemt, starałem się znaleźć źródło, aby bezskutecznie sprawdzić to sam.
Aktualizacja
Uświadomiłem sobie, dlaczego nie otrzymałem nazwanych metod. To dlatego, że zwracałem standardSupportMapFragment
zamiastMyMapFragment
. To znaczy, że nie mogę wywołać super z metody statycznej i nie mogę rzutować z klasy bazowej na klasę pochodną bez wyjątku.
Edytować Oto klasa
public class MyMapFragment extends SupportMapFragment {
private static List<MarkerOptions> mMarkers;
public static SupportMapFragment newInstance(GoogleMapOptions options, List<MarkerOptions> markers)
{
SupportMapFragment fragment = newInstance(options);
mMarkers = markers;
return fragment;
}
//have tried Overriding several methods including getMap()...
@Override
public void onResume ()
{
GoogleMap mMap = super.getMap();
//add the markers
if(mMap != null)
{
for(MarkerOptions marker : mMarkers)
{
mMap.addMarker(marker);
}
}
}
}