Android Compose – как предотвратить двойное отображение диалога?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Android Compose – как предотвратить двойное отображение диалога?

Сообщение Anonymous »

Я пытаюсь отобразить диалоговое окно как только отобразится текущее представление. Однако диалоговое окно отображается дважды (возможно, из-за особенностей работы рекомпозиции), и для его исчезновения требуется два закрытия.

Код: Выделить всё

    val showGpsDisabledDialog by viewModel.showGpsDisabledDialog.collectAsState()

Log.d(TAG, showGpsDisabledDialog.toString())
if (showGpsDisabledDialog) {
Log.d(TAG, "dialog")
val context = LocalContext.current

BasicAlertDialog(
onDismissRequest = {
Log.d(TAG, "dismiss")
viewModel.closeGpsDisabledDialog()
},

) {
Text("dialog")
}
}
ViewModel:

Код: Выделить всё

    @HiltViewModel
class MapViewModel @Inject constructor(): ViewModel() {

private var _showGpsDisabledDialog: MutableStateFlow = MutableStateFlow(true)
val showGpsDisabledDialog: StateFlow get() = _showGpsDisabledDialog.asStateFlow()

fun openGpsDisabledDialog() {
if(!_showGpsDisabledDialog.value)
_showGpsDisabledDialog.value = true
}

fun closeGpsDisabledDialog() {
if(_showGpsDisabledDialog.value)
_showGpsDisabledDialog.value = false
}
}
Я пытался сохранить состояние в компонуемой модели, а затем в модели представления.
Я пытался использовать LaunchedEffect, чтобы установить эти флаги (поэтому они неверны до того, как компонуемая визуализация)
Я попытался установить для них значение true в модели представления, используя задержку.
Я понял, что во всех этих случаях диалоговое окно отображается дважды, отображая простой диалог с текстом, и заметил что есть два текста перекрытие

Подробнее здесь: https://stackoverflow.com/questions/793 ... ying-twice
Ответить

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

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

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

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

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