Map v2 SupportMapFragment dentro de Viewpager
Fondo
He successfuflly agregó el nuevo mapa api v2.0 a un ViewPager y el mapa carga muy bien. Estoy utilizando el FragmentViewPager. Me encuentro con problemas sin embargo al intentar agregar marcadores como no puedo obtener el Fragmento por etiqueta como el ViewPager que estoy utilizando es de la biblioteca de compatibilidad y se define en XML, y esto "oculta" la etiqueta de mí.
- La altura de ViewPager en el diseño del Coordinador está más que disponible
- Flip imágenes en un viewpager
- Gradle - No se puede importar viewpagerindicator en Android Studio usando gradle dependency
- ViewPager dentro de un ScrollView no se desliza correclty
- FloatingActionButton aparece en pantalla cuando se utiliza TabLayout y ViewPager
La pregunta
¿Cómo puedo cargar el nuevo mapa v2 con los marcadores SupportMapFragment
en un ViewPager
que utiliza un FragmentPagerAdapter
.
Mi intento
Así que en mi nievety pensé que podría crear una solución elegante mediante la extensión de la SupportMapFragment en una nueva clase que hace lo siguiente:
- Agregue un nuevo constructor que tome
GoogleMapOptions
yList<MarkerOptions>
. Esto efectivamente llama al constructor existente que sólo tomaGoogleMapsOptions
y luego almacenar mi lista de marcadores dentro de una propiedad privada de la nueva clase. - Override
GetMap()
– comprueba si es nulo y si no es añadir los marcadores al mapa que cargamos anteriormente en el mapa y finalmente devolverlo.
Mis pensamientos eran que mi extensión podía ser altamente reutilizable y abstrae cualquier mapa relacionado con un lugar y permite que mis actividades creen el nuevo MapFragment por newInstance(myGoogleMapOptions, myMarkers)
.
Ok, así que el problema. Parte 1 parece funcionar bien sin embargo durante la depuración No puedo obtener el método Overridden GetMap () para ser llamado. De hecho, he intentado sobrepasar la mayoría de los métodos habituales que tienen los fragmentos y ninguno de ellos es llamado. ¿Hay algo extraño sucediendo con el SupportMapFragmemt, traté de encontrar la fuente para que no sirva para comprobar por mí mismo.
Actualizar
Me di cuenta por qué no estaba recibiendo mis métodos anulados llamado. Era porque estaba devolviendo el MyMapFragment
estándar en lugar de MyMapFragment
. Dicho esto, no puedo llamar a super de un método estático y no puedo emitir desde una clase base a una clase derivada sin excepción.
Editar Aquí está la clase
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); } } } }
- Cómo poner ViewPager verticalmente swiped en un ViewPager horizontalmente barrido
- Fragmentos de Viewpager y de Sherlock. ¿Cómo hacer somethng dentro de fragmento de FragmentActivity?
- Eclipse no reconocerá el proyecto como biblioteca (ActionBarSherlock / ViewPagerIndicator)
- Android: ViewPagerIndicator - Creación de diferentes diseños para diferentes páginas
- Fragmento en TabLayout sólo carga cuando el usuario desliza Android
- Cómo obtener la posición actual de un ViewPager
- Cómo cambiar la fuente de un pagertitlestrip
- Desplazamiento no funciona en android ViewPager con FragmentPagerAdapter
Sólo probado así y funciona.
public class MyMapFragment extends SupportMapFragment { private List<MarkerOptions> mMarkers; public static MyMapFragment create(GoogleMapOptions options, ArrayList<MarkerOptions> markers) { MyMapFragment fragment = new MyMapFragment(); Bundle args = new Bundle(); args.putParcelable("MapOptions", options); //obtained by decompiling google-play-services.jar args.putParcelableArrayList("markers", markers); fragment.setArguments(args); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Hacky and ugly but it works ArrayList<Parcelable> list = getArguments().getParcelableArrayList("markers"); mMarkers = new ArrayList<MarkerOptions>(list.size()); for (Parcelable parcelable : list) { mMarkers.add((MarkerOptions) parcelable); } } @Override public void onResume() { super.onResume(); GoogleMap mMap = super.getMap(); //add the markers if (mMap != null) { for (MarkerOptions marker : mMarkers) { mMap.addMarker(marker); } } } }
- Android: moviendo la imagen de fondo mientras navega por las vistas
- Cómo recuperar la actividad solicitada por un Intent