Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Agregar Google Maps API V2 en un fragmento

Estoy tratando de mostrar el mapa de la API de Google Maps V2 en fragmento. He intentado con el SupportMapFragment, pero no puedo obtener la salida esperada. También soy un principiante en esta plataforma! Lo que realmente quiero es sólo una manera de poner un mapa de la API de Google Maps V2 para Android en un fragmento. Comparte tus ideas y referencias.

Gracias por adelantado !

  • Etiqueta dentro de Polyline Google Maps V3
  • Android app google maps mostrando azulejos grises y no mapa!
  • Obtener el radio del mapa visible en Android
  • Android Google Map cómo comprobar si la ubicación del GPS está dentro del círculo
  • ¿Cómo manejar varios marcadores en Google Maps con la misma ubicación?
  • Cómo manejar el evento táctil en el mapa de google (MapFragment)?
  • Dibujo de formas en Android MapView independientemente del nivel de zoom
  • Cambiar el color del margen de la vista InfoWindow del marcador en google maps api v2
  • 9 Solutions collect form web for “Agregar Google Maps API V2 en un fragmento”

    Utilice SupportMapFragment lugar de MapFragment y use getActivity()

    Este es un ejemplo básico con SupportMapFragment :

     public class MainActivity extends ActionBarActivity implements OnMapReadyCallback{ private SupportMapFragment map; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); map = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); map.getMapAsync(this);//remember getMap() is deprecated! } @Override public void onMapReady(GoogleMap map) { map.moveCamera(CameraUpdateFactory.newLatLngZoom( new LatLng(47.17, 27.5699), 16)); map.addMarker(new MarkerOptions() .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher)).anchor(0.0f, 1.0f) // Anchors the marker on the bottom left .position(new LatLng(47.17, 27.5699))); //Iasi, Romania map.setMyLocationEnabled(true); } } 

    Y cambia la referencia en tu diseño:

     <fragment android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" class="com.google.android.gms.maps.SupportMapFragment" /> 

    Aquí está el código,

     public class YourFragment extends Fragment { // ... static final LatLng HAMBURG = new LatLng(53.558, 9.927); static final LatLng KIEL = new LatLng(53.551, 9.993); private GoogleMap map; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.yourlayout, null, false); map = ((SupportMapFragment) getFragmentManager().findFragmentById(R.id.map)) .getMap(); Marker hamburg = map.addMarker(new MarkerOptions().position(HAMBURG) .title("Hamburg")); Marker kiel = map.addMarker(new MarkerOptions() .position(KIEL) .title("Kiel") .snippet("Kiel is cool") .icon(BitmapDescriptorFactory .fromResource(R.drawable.ic_launcher))); // Move the camera instantly to hamburg with a zoom of 15. map.moveCamera(CameraUpdateFactory.newLatLngZoom(HAMBURG, 15)); // Zoom in, animating the camera. map.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null); //... return v; } 

    Su diseño,

      <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" > <fragment android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" class="com.google.android.gms.maps.SupportMapFragment" /> </RelativeLayout> 

    Hacer algunos cambios en su archivo de manifiesto also.Like,

      <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.myapp.android.locationapi.maps" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="17" android:targetSdkVersion="17" /> <permission android:name="com.myapp.android.locationapi.maps.permission.MAPS_RECEIVE" android:protectionLevel="signature" /> <uses-feature android:glEsVersion="0x00020000" android:required="true" /> <uses-permission android:name="com.myapp.android.locationapi.maps.permission.MAPS_RECEIVE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.myapp.android.locationapi.maps.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="your_apikey" /> </application> </manifest> 
     public class DemoFragment extends Fragment { MapView mapView; GoogleMap map; LatLng CENTER = null; public LocationManager locationManager; double longitudeDouble; double latitudeDouble; String snippet; String title; Location location; String myAddress; String LocationId; String CityName; String imageURL; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // TODO Auto-generated method stub View view = inflater .inflate(R.layout.fragment_layout, container, false); mapView = (MapView) view.findViewById(R.id.mapView); mapView.onCreate(savedInstanceState); setMapView(); } private void setMapView() { try { MapsInitializer.initialize(getActivity()); switch (GooglePlayServicesUtil .isGooglePlayServicesAvailable(getActivity())) { case ConnectionResult.SUCCESS: // Toast.makeText(getActivity(), "SUCCESS", Toast.LENGTH_SHORT) // .show(); // Gets to GoogleMap from the MapView and does initialization // stuff if (mapView != null) { locationManager = ((LocationManager) getActivity() .getSystemService(Context.LOCATION_SERVICE)); Boolean localBoolean = Boolean.valueOf(locationManager .isProviderEnabled("network")); if (localBoolean.booleanValue()) { CENTER = new LatLng(latitude, longitude); } else { } map = mapView.getMap(); if (map == null) { Log.d("", "Map Fragment Not Found or no Map in it!!"); } map.clear(); try { map.addMarker(new MarkerOptions().position(CENTER) .title(CityName).snippet("")); } catch (Exception e) { e.printStackTrace(); } map.setIndoorEnabled(true); map.setMyLocationEnabled(true); map.moveCamera(CameraUpdateFactory.zoomTo(5)); if (CENTER != null) { map.animateCamera( CameraUpdateFactory.newLatLng(CENTER), 1750, null); } // add circle CircleOptions circle = new CircleOptions(); circle.center(CENTER).fillColor(Color.BLUE).radius(10); map.addCircle(circle); map.setMapType(GoogleMap.MAP_TYPE_NORMAL); } break; case ConnectionResult.SERVICE_MISSING: break; case ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED: break; default: } } catch (Exception e) { } } 

    En fragment_layout

     <com.google.android.gms.maps.MapView android:id="@+id/mapView" android:layout_width="match_parent" android:layout_height="160dp" android:layout_marginRight="10dp" /> 

    Actualización 10/24/2014 Esto está mal. No deberías tener un fragmento en un fragmento. Más bien debe extender el SupportMapFragment. Consulte esta publicación stackoverflow para obtener más detalles: https://stackoverflow.com/a/19815266/568197

    Aquí está mi onDestroyView ()

     public void onDestroyView() { super.onDestroyView(); if (mMap != null) { getFragmentManager() .beginTransaction() .remove(getFragmentManager().findFragmentById(R.id.map)) .commit(); } } 

    Además de la respuesta anterior, también tuve que poner las siguientes líneas a mi manifiesto

     <!-- inside <aplication> tag --> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> 

    Y también cambié el diseño para utilizar SupportMapFragment lugar de MapFragment

     <fragment android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" class="com.google.android.gms.maps.SupportMapFragment" /> 

    Para todos aquellos amigos que se enfrentan al problema: –

    java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.maps.GoogleMap com.google.android.gms.maps.SupportMapFragment.getMap()

    Intenta integrar GoogleMap utilizando código

     FragmentManager fm = getChildFragmentManager(); googleMap = ((SupportMapFragment)fm.findFragmentById(R.id.googleMap)).getMap(); 

    Tengo el mismo problema, utilizo este código, pero sigo recibiendo este error: no puedo instanciar el fragmento com.google.android.gsm.SupportMapFragment: asegúrese de que el nombre de clase existe, es público y tiene una construcción vacía o que es pública

    Lo solucioné desde aquí: Cómo poner Google Maps V2 en un fragmento usando ViewPager

    Si está utilizando android studio crear google mapsactivity su mapa por defecto fragmento y generar su mapa API KEY y hacer sus cosas ……

    SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager (). FindFragmentById (R.id.map); MapFragment.getMapAsync (this);

    Y nuestro método de anulación

    Public void onMapReady (GoogleMap googleMap) {

      mMap = googleMap; LatLng map = new LatLng(lat, lon); mMap.addMarker(new MarkerOptions().position(map).title("your title")); mMap.animateCamera(CameraUpdateFactory.newLatLng(map)); mMap.setMapType(GoogleMap.MAP_TYPE_NONE); } 

    Este ejemplo fue construido a partir del código generado automáticamente desde android studio, no necesita cambiar nada en la actividad de mapas, solo el contexto en el archivo de diseño para que coincida con sus mapas

     <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:weightSum="1"> <fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:map="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/map" android:name="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="300dp" tools:context="com.gearwell.app.gpsmaps02.Gpsenmapa" /> <LinearLayout android:id="@+id/layButtonH" android:layout_height="150dp" android:layout_marginTop="50dp" android:layout_width="fill_parent" android:gravity="center" android:layout_weight="0.15"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Obtener Ubicacion" android:id="@+id/btnLocation" android:onClick="onClick"/> </LinearLayout> </LinearLayout> 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.