MapFragment лагает при возвращении из диалога
В моем приложении используется MapView из gms библиотеки. Есть такая навигация MapFragment -> DialogFragment -> Fragment. Когда я из Fragment возвращаюсь обратно на MapFragment, карта начинает жутко лагать. Но если после этого я снова открою DialogFrament и вернусь на карту, то карта перестает лагать. Так же карта перестает лагать если я опущу верхнюю шторку андроидовского статус бара и скрою ее (как я понял, она работает как диалог) или заблокирую и разблокирую телефон. Если я сделаю переход MapFragment -> Fragment и обратно, карта работает как надо. При переходе MapFragment -> DialogFrament и обратно, карта также работает как надо. То есть проблема появляется именно когда я делаю переход из диалога на другой фрагмент и обратно на карту. Для навигации использую Android Navigation Component.
Переход на диалог и на фрагмент из карты:
clusterManager.setCallbacks(object : ClusterManager.Callbacks<EstablishmentMarker> {
override fun onClusterClick(cluster: Cluster<EstablishmentMarker>): Boolean {
val establishments = cluster.items.map { it.establishment }
findNavController().navigate(R.id.bottomSheetEstablishments, Bundle().apply {
putParcelableArray(
EstablishmentsListBottomSheetFragment.KEY_LIST_ESTABLISHMENT,
establishments.toTypedArray()
)
})
return true
}
override fun onClusterItemClick(clusterItem: EstablishmentMarker): Boolean {
findNavController().navigate(R.id.action_mapFragment_to_establishmentFragment, Bundle().apply {
putInt(EstablishmentFragment.KEY_ESTABLISHMENT, clusterItem.establishment.id)
})
return true
}
})
Диалог:
class EstablishmentsListBottomSheetFragment: BottomSheetDialogFragment() {
private lateinit var binding: EstablishmentListBottomSheetFragmentBinding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = EstablishmentListBottomSheetFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
binding.list.layoutManager = LinearLayoutManager(requireContext())
binding.list.adapter = BottomSheetEstablishmentAdapter {
findNavController().navigate(R.id.action_bottomSheetEstablishments_to_establishmentFragment, Bundle().apply {
putInt(EstablishmentFragment.KEY_ESTABLISHMENT, it.id)
})
}
binding.list.addItemDecoration(SpacingItemDecorator(resources))
arguments?.getParcelableArray(KEY_LIST_ESTABLISHMENT).apply {
(binding.list.adapter as BottomSheetEstablishmentAdapter).setItems(this)
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
dialog?.setOnShowListener {
binding.root.minimumHeight = Resources.getSystem().displayMetrics.heightPixels
val behavior = (dialog as BottomSheetDialog).behavior
behavior.isFitToContents = true
}
}
companion object {
const val KEY_LIST_ESTABLISHMENT = "establishments"
}
}
Повторюсь, при нажатии на одиночный маркер открывается фрагмент, и при возврате на карту все работает нормально. При нажатии на кластер открывается диалог со списком элементов, и при нажатии на элемент открывает фрагмент, и если с этого фрагмента вернуться на карту она начинает лагать.