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);
            }
        }

    }

}

questionAnswers(1)

yourAnswerToTheQuestion