Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AndroidX片段添加谷歌地图_Android_Android Fragments_Google Maps Android Api 2_Androidx - Fatal编程技术网

AndroidX片段添加谷歌地图

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

我正在尝试使用MVP模式在AndroidX片段(AndroidX.Fragment.app.Fragment)中添加一个Google地图,但它没有显示出来。但当我尝试在普通片段(android.support.v4.app.Fragment)或活动中使用此代码时,它显示得很好

我试过两种方法:

  • 使用MapView(在代码中注释)

  • 使用SupportMapFragment(AndroidX ref不支持该功能)

  • 以下是我尝试过的代码:

    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))
        }