Mapa v2 SupportMapFragment dentro de Viewpager
Fondo
He agregado exitosamente el nuevo mapa api v2.0 a un ViewPager y el mapa se carga bien. Estoy usando el FragmentViewPager. Sin embargo, tengo problemas cuando intento agregar marcadores, ya que no puedo obtener el Fragmento por la etiqueta, ya que el ViewPager que estoy usando proviene de la biblioteca de compatibilidad y está definido en XML, y esto "me oculta" la etiqueta.
La pregunta
¿Cómo puedo cargar el nuevo mapa v2 con marcadores?SupportMapFragment
en unaViewPager
que usa unFragmentPagerAdapter
.
Mi intento
Así que, en mi opinión, pensé que podría crear una solución elegante al extender SupportMapFragment en una nueva clase que haga lo siguiente:
Agrega un nuevo constructor que tomaGoogleMapOptions
yList<MarkerOptions>
. Esto llama efectivamente al constructor existente que solo tomaGoogleMapsOptions
y luego almacenar mi lista de marcadores dentro de una propiedad privada de la nueva clase.AnularGetMap()
- Verifique si es nulo y si no está agregando los marcadores al mapa que cargamos anteriormente en el mapa y finalmente devuélvalo.Mi opinión fue que mi extensión podría ser altamente reutilizable y resumir cualquier mapa relacionado con un lugar y permitir que mis actividades creen el nuevo MapFragment denewInstance(myGoogleMapOptions, myMarkers)
.
Ok, entonces el problema. La parte 1 parece funcionar bien, sin embargo, durante la depuración no puedo hacer que se llame al método GetMap () anulado. De hecho, he intentado anular la mayoría de los métodos habituales que tienen los fragmentos y ninguno de ellos es llamado. ¿Hay algo extraño en el SupportMapFragmemt? Traté de encontrar la fuente para que no sirviera de nada para comprobarlo por mí mismo.
Actualizar
Me di cuenta por qué no me llamaban mis métodos anulados. Fue porque estaba devolviendo el estandarte.SupportMapFragment
más bien queMyMapFragment
. Dicho esto, no puedo llamar a super desde un método estático y no puedo convertir desde una clase base a una clase derivada sin excepción.
Editar Aqui esta 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);
}
}
}
}