Я использую Jetpack Compose Navigation с пунктами назначения диалогов. Когда я показываю DialogFragment поверх диалогового окна создания навигации, порядок правильный. Но после фонового оформления приложения и возврата DialogFragment появляется под диалогом создания, а не сверху.
Код
Код: Выделить всё
// Compose Navigation Dialog
NavHost(navController) {
dialog {
MyScreen()
}
}
@Composable
fun MyScreen() {
val fragmentManager = LocalParentFragmentManager.current
Button(onClick = {
// Show third-party DialogFragment
MyDialogFragment().show(fragmentManager, "dialog")
}) {
Text("Show Dialog")
}
}
- Перейдите к диалоговому окну создания (через NavController)
- Нажмите кнопку, чтобы отобразить фрагмент диалога
- Нажмите кнопку ДОМОЙ
- Вернитесь в приложение
- Ошибка: DialogFragment теперь находится под диалогом создания
Код: Выделить всё
Before Background: After Background:
┌─────────────────┐ ┌─────────────────┐
│ DialogFragment │ ←Top │ Compose Dialog │ ←Top
├─────────────────┤ ├─────────────────┤
│ Compose Dialog │ │ DialogFragment │
└─────────────────┘ └─────────────────┘
Как сохранить правильный z-порядок между диалогами создания навигационных диалогов и DialogFragments в фоновом режиме приложения?
Обходное решение
Отключение DialogFragments в onStop() исправляет проблему, но пользователи теряют диалог состояние:
Код: Выделить всё
override fun onStop() {
super.onStop()
parentFragmentManager.fragments
.filterIsInstance()
.forEach { it.dismissAllowingStateLoss() }
}
Среда: Compose 1.5.x, Navigation 2.7.x, API 24-34
Примечание: DialogFragment взят из сторонней библиотеки (нельзя изменить)
Теги: android jetpack-compose android-dialogfragment compose-navigation
Подробнее здесь: https://stackoverflow.com/questions/797 ... navigation
Мобильная версия