Нужно дважды нажать кнопку подтверждения с помощью AlertDialog Jetpack compose с помощью OutlinedTextField

#android #android-jetpack #android-jetpack-compose

#Android #android-jetpack #android-jetpack-compose

Вопрос:

Я использую AlertDialog от jetpack compose с текстовым полем внутри. Идея заключается в том, что пользователь должен ввести некоторый текст в текстовое поле и нажать подтвердить. Проблема в том, что после вставки текста в OutlinedTextField , нужно нажать confirmButton дважды — один раз для удаления фокуса с OutlinedTextField (чтобы удалить программную клавиатуру) и один раз для фактического нажатия кнопки подтверждения.

Не совсем уверен, может ли такое поведение быть преднамеренным. Однако с «обычным» AlertDialog это не так.

Вот минимальный пример кода:

     @Composable
    private fun MyAlertDialog() {
        val text = remember { mutableStateOf("") }
        val hasConfirmed = remember { mutableStateOf(false) }
        if (!hasConfirmed.value) {
            AlertDialog(
                title = { Text("Title") },
                text = {
                    OutlinedTextField(
                        value = text.value,
                        onValueChange = {
                            text.value = it
                        },
                        label = {
                            ProvideEmphasis(emphasis = EmphasisAmbient.current.medium) {
                                Text(
                                    text = stringResource(id = R.string.notes),
                                    style = typography.body2
                                )
                            }
                        }
                    )
                },
                onDismissRequest = {
                },
                confirmButton = {
                    Button(onClick = {
                        hasConfirmed.value = true
                    },
                    ) {
                        Text("Confirm")
                    }
                }
            )
        } else {
            Text("Confirmed")
        }
    }
  

Комментарии:

1. Кажется, это работает на Api 30; но для этого требуется два нажатия на Api 27, 28, 29 (протестировано только на эмуляторах с Api 27, 28, 29 и 30)

2. в настоящее время существует множество проблем с текстовыми полями и их фокусом внутри диалоговых окон. Возможно, вы захотите заглянуть в систему отслеживания проблем и добавить свой, если он еще не существует.

3. В настоящее время работает для меня одним щелчком мыши. Версия Compose: 1.0.3. Протестировано на устройстве с API 24.