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?)
, но в итоге получил тот же результат.
Я также знаю о вопросе это с теми же проблемами, но при совсем других обстоятельствах, и ответы не очень полезны.
Таким образом, проблема не в 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>
Таким образом, раскрывающееся меню было закрыто, и проблема исчезла. Все работает отлично, лаги исчезли. Я действительно не понимаю, в чем корень проблемы, но я думаю, что это должно иметь какое-то объяснение.