Mapas de Google en una pestaña de acciónbarsherlock

Estoy tratando de obtener google maps v2 trabajando en mi aplicación. He visto varios ejemplos que muestran cómo se puede abrir SupportMapFragment dentro de una actividad. La idea es que su actividad llame a setContentView(R.layout.map_layout); Donde map_layout.xml enlaza al fragmento con las líneas:

 android:name="com.google.android.gms.maps.SupportMapFragment" xmlns:map="http://schemas.android.com/apk/res-auto" 

La línea "name =" dice efectivamente que "este diseño debe ser controlado por un fragmento del tipo 'SupportMapFragment'".

Mi complicación es que estoy tratando de obtener el mapa para aparecer en una actividad con pestañas (implementado con actionbarsherlock). Esto significa que cualquier fragmento que corresponda a una selección de fichas debe implementar un TabListener. Pero SupportMapFragment no lo hace. Así que ahora presumiblemente necesito crear un nuevo fragmento así:

 public class MyMapFragmentWithTabListener extends SupportMapFragment implements TabListener { 

Pero ahora tengo todo confundido acerca de cómo escribir el contenido de MapFragmentWithTabListener en particular onCreateView … ¿Debo estar inflando algún diseño? Seguramente no puedo estar inflando exactamente el mismo map_layout.xml de los ejemplos porque eso ya declara que está controlado por SupportMapFragment, mientras que en esta implementación debería ser controlado por MyMapFragmentWithTabListener – necesito un archivo xml ligeramente diferente para inflar (si Así, ¿cómo debería ser?) – ¿O debo estar creando mi vista de forma programática?

He hecho esto en unas cuantas aplicaciones ahora. En lugar de extender SupportMapFragment, simplemente crea su propio MapFragment. Usted puede tener su propio diseño, con una vista MapView dentro de ella. La clave es encaminar los eventos del ciclo de vida del fragmento al MapView, y bobs tu tío.

He aquí algunos ejemplos de código:

MapFragment

 package com.example.testapplication; import java.util.concurrent.TimeUnit; import com.google.android.gms.common.GooglePlayServicesNotAvailableException; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.MapView; import com.google.android.gms.maps.MapsInitializer; public class TestMapFragment extends Fragment { private MapView mMapView; @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.home_fragment, container, false); mMapView = (MapView) view.findViewById(R.id.mapview); // inflat and return the layout mMapView.onCreate(savedInstanceState); mMapView.onResume();// needed to get the map to display immediately try { MapsInitializer.initialize(getActivity()); } catch (GooglePlayServicesNotAvailableException e) { e.printStackTrace(); } GoogleMap googleMap = mMapView.getMap(); googleMap.getUiSettings().setMyLocationButtonEnabled(true); return view; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setRetainInstance(true); } /* * Using a mapview in a fragment requires you to 'route' * the lifecycle events of the fragment to the mapview */ @Override public void onResume() { super.onResume(); if (null != mMapView) mMapView.onResume(); } @Override public void onPause() { super.onPause(); if (null != mMapView) mMapView.onPause(); } @Override public void onDestroy() { super.onDestroy(); if (null != mMapView) mMapView.onDestroy(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); if (null != mMapView) mMapView.onSaveInstanceState(outState); } @Override public void onLowMemory() { super.onLowMemory(); if (null != mMapView) mMapView.onLowMemory(); } } 

Y el diseño:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:map="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" > <com.google.android.gms.maps.MapView android:id="@+id/mapview" android:layout_width="match_parent" android:layout_height="match_parent" map:uiZoomControls="false" /> </RelativeLayout> 

Puedes usarlo de esta manera.

  public class NewActivity extends FragmentActivity { private GoogleMap mMap; SupportMapFragment mapFragment; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activit); mapFragment = (SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map); if(isGooglePlayServicesIsInstalled(mContext)){ mMap = mapFragment.getMap(); mMap.setMapType(GoogleMap.MAP_TYPE_NORMAL); mMap.getUiSettings().setCompassEnabled(true); mMap.getUiSettings().setZoomControlsEnabled(true); }else{ //display any toast message //Global.Toast("Please First install Google Maps"); } public static boolean isGooglePlayServicesIsInstalled(Context context){ int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(context); if (resultCode == ConnectionResult.SUCCESS) return true; else return false; } 

Compruebe por favor hacia fuera todo el permiso , llave del api y requiera toda la cosa. Si usted que consigue cualquier registro del error entonces puesto como comentario.

  • Android Diseño de materiales Navegación Vista -> Elemento
  • Las asignaciones de preferencias compartidas de Android no persisten entre sesiones de emulador
  • Análisis de archivos XML grandes utilizando el analizador SAX (salte algunas líneas / etiquetas)
  • Adición de una vista personalizada a XML ... pero con un tipo GENERIC
  • Cómo llamar a los colores de los recursos de forma dinámica en Android?
  • ¿Hay una manera de cargar arbitrariamente recursos en tiempo de ejecución en Android?
  • RecyclerVista el espacio entre los elementos que se expanden al desplazarse
  • El botón recortado no recibe la entrada táctil
  • Cómo poner TODO comentarios en xml?
  • Cómo agregar un texto largo con muchos párrafos en string.xml en android
  • Logo de ActionBar mover hacia la izquierda
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.