如何从其他片段更改Google地图相机

时间:2019-02-28 23:28:57

标签: android google-maps android-fragments kotlin kotlin-lateinit

这是场景:

1)FragmentA开始,其中包含Google Maps片段,摄像头已移至用户的GPS位置

2)用户切换到FragmentB,其中有一个地方自动填充片段,我可以在其中抓住用户输入的位置

3)单击FragmentB中的按钮后,它将切换回Fragment A,并将摄像机位置移至用户从FragmentB输入的地址

问题:

  • 尝试从lateinit property mMap has not been initialized更改FragmentA的摄像机位置时,出现FragmentB错误。但是我认为,由于FragmentA已经加载,因此mMap仍将被初始化。当我在片段之间切换时(按钮导航栏),它保持片段的状态,所以我知道它没有被破坏。

FragmentB

val button = view.findViewById(R.id.button_register) as Button
        button.setOnClickListener{
            Log.d(TAG, "Clicked")
            val dialog = SuccessDialog()
            dialog.show(fragmentManager, "success dialog")

            mFragmentNavigation.clearStack()
            bottomBar.selectedItemId = R.id.nav_map
            mFragmentNavigation.switchTab(0)
            FragmentA().mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(searchedLocation, 12f))

FragmentA

class FragmentA: BaseFragment(), OnMapReadyCallback, GoogleMap.OnMarkerClickListener {
    lateinit var mMap: GoogleMap

.
.
.

override fun onMapReady(googleMap: GoogleMap) {
    mMap = googleMap
    checkPermission()
    try {
        val success = googleMap.setMapStyle(
            MapStyleOptions.loadRawResourceStyle(
                activity, R.raw.style_json
            )
        )

        if (!success) {
            Log.e(TAG, "Style parsing failed.")
        }
    } catch (e: Resources.NotFoundException) {
        Log.e(TAG, "Can't find style. Error: ", e)
    }

    // location stuff
    mMap.uiSettings.isZoomControlsEnabled = true
    mMap.setOnMarkerClickListener(this)
    mMap.uiSettings.isMapToolbarEnabled = false
}

0 个答案:

没有答案