Низкая производительность Google SupportMapFragment MapView после возврата из другого фрагмента

SupportMapFragment отстает, и все вместе имеет плохую производительность после возвращения из стека.

Проблема странная, потому что я использую навигационный граф для целей навигации, и проблема не всегда присутствует. Вот два разных сценария:

MapFragment -> AnotherFragment (через пункт меню ActionBar) -> Mapfragment

override fun onOptionsItemSelected(item: MenuItem?): Boolean {
        onNavDestinationSelected(item!!, navController)
        return super.onOptionsItemSelected(item)
    }

В этом случае MapFragment отстает после нажатия кнопки «Назад» в AnotherFragment.

MapFragment -> AnotherFragment (через кнопку по умолчанию) -> Mapfragment

navController.navigate(R.id.action_mapFragment_to_anotherFragment)

В этом случае MapFragment работает нормально.

Я пытался использовать navController.navigate(R.id.action_mapFragment_to_anotherFragment) в onOptionsItemSelected(item: MenuItem?), но в итоге получил тот же результат.

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

2
0
465
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Таким образом, проблема не в Mapfragment или SupportMapFragment от Google, а в какой-то ошибке пользовательского интерфейса Android. Мне удалось избежать этого, и я хочу поделиться решением.

Сама проблема возникла из-за навигации ActionBar, исходная настройка была такой. В res/menu/menu.xml

<menu xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto">
    <item
        android:title = "@string/about"
        android:id = "@+id/options_more"
        android:icon = "@drawable/ic_baseline_more_vert_24px"
        android:orderInCategory = "100"
        app:showAsAction = "always" />
        <menu>
            <item
                android:id = "@+id/anotherFragment"
                android:title = "@string/another_menu_title" />

            <item
                android:id = "@+id/alsoAnotherFragment"
                android:title = "@string/alsoanother_menu_title" />
        </menu>
    </item>
</menu>

В этом случае появляется раскрывающееся меню (которое содержит еще два пункта) при нажатии на пункт меню в правом верхнем углу.

Когда я использовал такой макет, произошло отставание. После нескольких часов проб и ошибок я разделил раскрывающееся меню на две отдельные кнопки следующим образом:

<menu xmlns:android = "http://schemas.android.com/apk/res/android"
    xmlns:app = "http://schemas.android.com/apk/res-auto">
    <item
        android:id = "@+id/anotherFragment"
        android:icon = "@drawable/ic_baseline_location_city_24px"
        android:title = "@string/about"
        app:showAsAction = "ifRoom"/>
    <item
        android:id = "@+id/alsoAnotherFragment"
        android:icon = "@drawable/ic_baseline_more_vert_24px"
        android:title = "@string/about"
        app:showAsAction = "ifRoom"/>
</menu>

Таким образом, раскрывающееся меню было закрыто, и проблема исчезла. Все работает отлично, лаги исчезли. Я действительно не понимаю, в чем корень проблемы, но я думаю, что это должно иметь какое-то объяснение.

Другие вопросы по теме