Вот сценарий:
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
}