AndroidX片段添加谷歌地图
我正在尝试使用MVP模式在AndroidX片段(AndroidX.Fragment.app.Fragment)中添加一个Google地图,但它没有显示出来。但当我尝试在普通片段(android.support.v4.app.Fragment)或活动中使用此代码时,它显示得很好 我试过两种方法:AndroidX片段添加谷歌地图,android,android-fragments,google-maps-android-api-2,androidx,Android,Android Fragments,Google Maps Android Api 2,Androidx,我正在尝试使用MVP模式在AndroidX片段(AndroidX.Fragment.app.Fragment)中添加一个Google地图,但它没有显示出来。但当我尝试在普通片段(android.support.v4.app.Fragment)或活动中使用此代码时,它显示得很好 我试过两种方法: 使用MapView(在代码中注释) 使用SupportMapFragment(AndroidX ref不支持该功能) 以下是我尝试过的代码: import android.os.Bundle import
import android.os.Bundle
import com.google.android.gms.maps.*
import com.google.android.gms.maps.model.LatLng
import com.test.App
import com.test.R
import com.test.ui.base.BaseFragment
import javax.inject.Inject
import com.google.android.gms.maps.model.MarkerOptions
import com.google.android.gms.maps.SupportMapFragment
class OverviewMapFragment : BaseFragment<OverviewMapContract.View, OverviewMapContract.Presenter>(), OverviewMapContract.View, OnMapReadyCallback {
private var map: GoogleMap? = null
// private var mapView: MapView? = null
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
val mapFragment = childFragmentManager.findFragmentById(R.id.map) as SupportMapFragment
mapFragment.getMapAsync(this)
// mapView = view!!.findViewById(R.id.map_view) as MapView
// mapView!!.onCreate(savedInstanceState);
// mapView!!.getMapAsync(this)
}
/*override fun onStart() {
super.onStart()
mapView!!.onStart()
}
override fun onResume() {
super.onResume()
mapView!!.onResume()
}
override fun onDestroy() {
mapView!!.onDestroy()
super.onDestroy()
}
override fun onLowMemory() {
super.onLowMemory()
mapView!!.onLowMemory()
}
override fun onStop() {
super.onStop()
mapView!!.onStop()
}
override fun onPause() {
mapView!!.onPause()
super.onPause()
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
mapView!!.onSaveInstanceState(outState)
}*/
override fun onMapReady(googleMap: GoogleMap?) {
map = googleMap
map!!.setMinZoomPreference(14.0f)
val ny = LatLng(40.7143528, -74.0059731)
map!!.addMarker(MarkerOptions().position(ny));
map!!.moveCamera(CameraUpdateFactory.newLatLng(ny))
}
最后,我通过使用MapView(在代码中注释)并稍微延迟调用
onMapReady
找到了解决方案。现在,地图在MapView中显示良好
override fun initUI() {
mapView?.postDelayed({
mapView?.onCreate(Bundle())
mapView?.getMapAsync {
onMapReady(it)
}
}, 500)
}
private fun onMapReady(googleMap: GoogleMap?) {
map = googleMap
// map?.setMinZoomPreference(14.0f)
val ny = LatLng(40.7143528, -74.0059731)
map?.addMarker(MarkerOptions().position(ny));
map?.moveCamera(CameraUpdateFactory.newLatLng(ny))
}
可能重复的
<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"/>
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
<permission
android:name="com.example.permission.MAPS_RECEIVE"
android:protectionLevel="signature"/>
<uses-permission android:name="com.example.permission.MAPS_RECEIVE"/>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key" />
<uses-library android:name="com.google.android.maps" />
implementation 'com.google.android.gms:play-services-maps:$googleMapVersion'
override fun initUI() {
mapView?.postDelayed({
mapView?.onCreate(Bundle())
mapView?.getMapAsync {
onMapReady(it)
}
}, 500)
}
private fun onMapReady(googleMap: GoogleMap?) {
map = googleMap
// map?.setMinZoomPreference(14.0f)
val ny = LatLng(40.7143528, -74.0059731)
map?.addMarker(MarkerOptions().position(ny));
map?.moveCamera(CameraUpdateFactory.newLatLng(ny))
}