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

Повторюсь, при нажатии на одиночный маркер открывается фрагмент, и при возврате на карту все работает нормально. При нажатии на кластер открывается диалог со списком элементов, и при нажатии на элемент открывает фрагмент, и если с этого фрагмента вернуться на карту она начинает лагать.


Ответы (0 шт):