Z-порядок DialogFragment изменен на обратный после фоновой обработки приложения с помощью Compose NavigationAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Z-порядок DialogFragment изменен на обратный после фоновой обработки приложения с помощью Compose Navigation

Сообщение Anonymous »

Проблема
Я использую 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»