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'".
- Dirección del elemento de derecha a izquierda en android con más de 4,2
- Android Studio no identifica el archivo xml como archivo de diseño
- ExpandableListView dentro de una vista de desplazamiento
- ¿Alternativas para DOM API en Android?
- Marco XML simple en android, atributo de clase
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?
- Derecho Drawable en Android. No funciona
- Androide. OnEditorAction nunca llamado
- Cómo crear envoltorios xml reutilizables para los archivos de diseño de Android
- Cómo tener selectableItemBackground en Imageview?
- Altura mitad fill_parent xml
- Android: verifica la firma de XML
- Añadiendo el hilador a ActionBar (no Navegación
- Definir un estilo personalizado (tema) en un componente de conmutador Android
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.
- ¿Cuál es la mejor estructura para un proyecto SVN de Android?
- ¿Por qué el código de carga de blobstore tiene url de redireccionamiento?