Как поменять камеру на карте Google с другого фрагмента - PullRequest
0 голосов
/ 01 марта 2019

Вот сценарий:

1) Запускается с FragmentA, который содержит фрагмент Google Maps, камера перемещается в местоположение GPS пользователя

2) Пользователь переключается на FragmentB, в нем есть фрагмент автозаполнения места, где я беру место, введенное пользователем

3) Послещелкнув кнопку в FragmentB, он переключается обратно на фрагмент A и должен переместить местоположение камеры по адресу, введенному пользователем с FragmentB

Проблема:

  • Я получаю ошибку lateinit property mMap has not been initialized при попытке изменить местоположение камеры FragmentA с FragmentB.Но я подумал, что поскольку FragmentA уже загружен, mMap все равно будет инициализирован.когда я переключаюсь между своими фрагментами (кнопка навигации), он сохраняет состояние фрагмента, поэтому я знаю, что он не уничтожается.

Фрагмент B

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

Фрагмент A

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