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»