FragmentContainerView 中未调用/显示 OnMapReady
Posted
技术标签:
【中文标题】FragmentContainerView 中未调用/显示 OnMapReady【英文标题】:OnMapReady is not being called/shown in fragmentContainerView 【发布时间】:2021-10-22 06:18:37 【问题描述】:我是 Google Maps API 的新手,我遇到的问题是,当我尝试在 fragmentContainerView 上显示地图时,它不显示标记并且不缩放相机,但是当我在片段本身上设置内容视图时它显示标记缩放相机。
这只是在 fragmentContainerView 中显示地图,没有标记并且不缩放,它基本上只是调用地图。
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_map)
supportActionBar?.hide()
val mapFragment = supportFragmentManager
.findFragmentById(R.id.map) as SupportMapFragment?
mapFragment?.getMapAsync(this)
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
另一方面,现在这也显示了标记和缩放,但由于 setContentView,它替换了整个活动视图。
override fun onCreate(savedInstanceState: Bundle?)
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_map)
supportActionBar?.hide()
binding = FragmentMapsBinding.inflate(layoutInflater)
setContentView(binding.root)
val mapFragment = supportFragmentManager
.findFragmentById(R.id.map) as SupportMapFragment?
mapFragment?.getMapAsync(this)
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
请帮忙。
【问题讨论】:
【参考方案1】:问题是您正在尝试使用 Activity 的 FragmentManager,而您应该使用 Fragment 的子 FragmentManager。 移除 Fragment 中的 onCreate() 覆盖,并添加一个 onCreateView() 覆盖在您膨胀布局的位置。
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View
binding = FragmentMapsBinding.inflate(inflate,R.layout.activity_map,
container, false)
val mapFragment = childFragmentManager
.findFragmentById(R.id.map) as SupportMapFragment?
mapFragment?.getMapAsync(this)
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this)
return binding.root
【讨论】:
以上是关于FragmentContainerView 中未调用/显示 OnMapReady的主要内容,如果未能解决你的问题,请参考以下文章
使用 androidx.fragment.app.FragmentContainerView 时出现 ClassNotFoundException
片段不使用 FragmentContainerView 切换
带有 FragmentContainerView 的 Null NavHostFragment/NavController
膨胀类android.fragment.app.FragmentContainerView时出错,有人可以告诉我我缺少啥