Map Fragment(Kotlin)onMapReady无法正常工作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Map Fragment(Kotlin)onMapReady无法正常工作相关的知识,希望对你有一定的参考价值。
我正在尝试在片段中实现一个地图,我能够显示地图,但onMapReady
无法正常工作,因为它不添加标记而不移动相机。码
MapFragment
class MapFragment : Fragment(), OnMapReadyCallback
private lateinit var mMap: GoogleMap
companion object
var mapFragment : SupportMapFragment?=null
val TAG: String = MapFragment::class.java.simpleName
fun newInstance() = MapFragment()
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View?
// Inflate the layout for this fragment
var rootView = inflater.inflate(R.layout.fragment_map, container, false)
mapFragment = fragmentManager?.findFragmentById(R.id.fallasMap) as SupportMapFragment?
mapFragment?.getMapAsync(this)
return rootView
override fun onMapReady(googleMap: GoogleMap?)
mMap = googleMap!!
// Add a marker in Sydney and move the camera
val sydney = LatLng(-34.0, 151.0)
mMap.addMarker(MarkerOptions().position(sydney).title("Marker in Sydney"))
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney))
XML
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout 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=".fragments.MapFragment">
<fragment
android:id="@+id/fallasMap"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
您使用错误的片段管理器来访问它。因为它是片段中的片段,所以它被添加到childFragmentManager
中。
childFragmentManager.findFragmentById(R.id.fallasMap) as SupportMapFragment
也可以使用as?
强制转换运算符而不是强制转换为可选类型。或者甚至进行正常演员,因为你需要片段是正确的,而null
将是一个bug。
如果没有正确清理片段,也不要存储片段的静态引用。
您应该传递Value google Map以使用您的标记映射到InterAct
override fun onMapReady(googleMap: GoogleMap?)
mMap = googleMap
// Add a marker in Sydney and move the camera
val sydney = LatLng(-34.0, 151.0)
mMap.addMarker(MarkerOptions().position(sydney).title("Marker in
Sydney"))
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney))
在您的情况下共享这些变量全局不正确,您应该从companion object
中删除它们并在每次打开片段时创建一个新实例。
当rootView != null
onMapReady
方法不会被调用。
所以我建议将它们从companion object
中移除并将它们放入onCreateView
而不使用条件if (rootView == null)
(删除条件)。
使用
supportFragmentManager
找到SupportMapFragment
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View?
var rootView = inflater.inflate(R.layout.fragment_map, container, false)
mapFragment = supportFragmentManager?.findFragmentById(R.id.fallasMap) as SupportMapFragment?
mapFragment?.getMapAsync(this)
return rootView
如果您没有自定义片段,那么也在XML文件中
<fragment
android:id="@+id/fallasMap"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
以上是关于Map Fragment(Kotlin)onMapReady无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin:如何从 Fragment 调用 JobIntentService?
Kotlin:是不是可以从 Activity-1 的 Fragment 移动到 Activity-2
Kotlin基础从入门到进阶系列讲解(基础篇)Fragment的基本使用