studio mapview google getmapasync example ejemplo java android google-maps android-mapview

java - google - android MapView en Fragment



mapview android example (3)

Agregando a la respuesta de MD:

De la documentation :

Un GoogleMap se debe adquirir usando getMapAsync (OnMapReadyCallback). MapView inicializa automáticamente el sistema de mapas y la vista.

De acuerdo con esto, la forma más correcta de inicializar GoogleMap es usando getMapAsync .

Tenga en cuenta que su clase tiene que implementar OnMapReadyCallback

@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_map_page, container, false); mMapView = (MapView) v.findViewById(R.id.map_view); mMapView.onCreate(savedInstanceState); mMapView.getMapAsync(this); //this is important return v; } @Override public void onMapReady(GoogleMap googleMap) { mGoogleMap = googleMap; mGoogleMap.getUiSettings().setZoomControlsEnabled(true); mGoogleMap.addMarker(new MarkerOptions().position(/*some location*/)); mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(/*some location*/, 10)); } @Override public void onResume() { super.onResume(); mMapView.onResume(); } @Override public void onPause() { super.onPause(); mMapView.onPause(); } @Override public void onDestroy() { super.onDestroy(); mMapView.onDestroy(); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); mMapView.onSaveInstanceState(outState); } @Override public void onLowMemory() { super.onLowMemory(); mMapView.onLowMemory(); }

Quiero tener MapView dentro de mi Fragment

Este es mi archivo FragmentLayout xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#17df0d" android:orientation="vertical" > <com.google.android.gms.maps.MapView android:id="@+id/mapview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_above="@+id/textView1" android:layout_alignParentLeft="true" android:layout_alignParentRight="true" android:layout_marginBottom="70dp" > </com.google.android.gms.maps.MapView> </RelativeLayout>

Mi archivo AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="a.b.c.d" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="17" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="your_api_key" /> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> </application> <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" /> <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" /> <permission android:name="a.b.c.d.permission.MAPS_RECEIVE" android:protectionLevel="signature" /> <uses-permission android:name="a.b.c.d.permission.MAPS_RECEIVE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <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" /> </manifest>

y mi clase Fragmento

public class ReportFragment extends Fragment implements LocationListener { MapView mapView = null; //eventually it is being read from view and assigned

cuando abro la aplicación, no veo ninguna vista de mapa en mi Fragmento


Del ejemplo de Josh Holtz en GitHub :

Debería agregar MapView en su Layout como

<com.google.android.gms.maps.MapView android:id="@+id/mapview" android:layout_width="fill_parent" android:layout_height="fill_parent" />

e implementa tu Fragment como

public class SomeFragment extends Fragment { MapView mapView; GoogleMap map; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.some_layout, container, false); // Gets the MapView from the XML layout and creates it mapView = (MapView) v.findViewById(R.id.mapview); mapView.onCreate(savedInstanceState); // Gets to GoogleMap from the MapView and does initialization stuff map = mapView.getMap(); map.getUiSettings().setMyLocationButtonEnabled(false); map.setMyLocationEnabled(true); // Needs to call MapsInitializer before doing any CameraUpdateFactory calls try { MapsInitializer.initialize(this.getActivity()); } catch (GooglePlayServicesNotAvailableException e) { e.printStackTrace(); } // Updates the location and zoom of the MapView CameraUpdate cameraUpdate = CameraUpdateFactory.newLatLngZoom(new LatLng(43.1, -87.9), 10); map.animateCamera(cameraUpdate); return v; } @Override public void onResume() { mapView.onResume(); super.onResume(); } @Override public void onDestroy() { super.onDestroy(); mapView.onDestroy(); } @Override public void onLowMemory() { super.onLowMemory(); mapView.onLowMemory(); } }


En caso de que alguien esté buscando una versión de Kotlin de MapView Fragment;)

class MapViewKotlinFragment : Fragment(), OnMapReadyCallback { private var mMap: MapView? = null override fun onSaveInstanceState(outState: Bundle?) { super.onSaveInstanceState(outState) mMap?.onSaveInstanceState(outState) } override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater?.inflate(R.layout.fragment_map, container, false) mMap = view?.findViewById(R.id.mapViewPlaces) as MapView mMap?.onCreate(savedInstanceState) mMap?.getMapAsync(this) return view } override fun onResume() { super.onResume() mMap?.onResume() } override fun onPause() { super.onPause() mMap?.onPause() } override fun onStart() { super.onStart() mMap?.onStart() } override fun onStop() { super.onStop() mMap?.onStop() } override fun onDestroy() { super.onDestroy() mMap?.onDestroy() } override fun onLowMemory() { super.onLowMemory() mMap?.onLowMemory() } override fun onMapReady(googleMap: GoogleMap) { googleMap.addMarker(MarkerOptions().position(LatLng(0.0, 0.0)).title("Marker")) }