JetpackCompose — «LocalFocusManager.current.moveFocus()» не работает в диалоговом окне

Я пытаюсь создать макет диалога с двумя текстовыми полями. При этом я пытаюсь внедрить функцию, согласно которой, когда пользователь заполняет верхнее поле ввода, он будет переходить к следующему полю ввода, нажав клавишу «Далее». Однако это не работает.

Кроме того, я узнал, что это работало, если не в Диалоге.

Вот мой код:

      @Composable
fun TestDialog(
    openDialog: MutableState<Boolean>
) {
    val focusManager = LocalFocusManager.current
    val field1 = remember { mutableStateOf("") }
    val field2 = remember { mutableStateOf("") }

    Dialog(
        onDismissRequest = { openDialog.value = false }
    ) {
        Surface(
            shape = MaterialTheme.shapes.medium,
            color = MaterialTheme.colors.surface,
        ) {
            Box(
                modifier = Modifier.padding(
                    vertical = 16.dp,
                    horizontal = 16.dp
                ),
                contentAlignment = Alignment.Center
            ) {
                Column {
                    Text("Title")

                    Spacer(Spacer)

                    Text(
                        text = "message",
                        modifier = Modifier
                            .padding(bottom = 14.dp)
                            .alpha(ContentAlpha.medium),
                        style = MaterialTheme.typography.body2
                    )

                    OutlinedTextField(
                        modifier = Modifier.fillMaxWidth(),
                        value = field1.value,
                        onValueChange = { field1.value = it },
                        label = { Text("Label1") },
                        singleLine = true,
                        keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next),
                        keyboardActions = KeyboardActions(
                            onNext = {
                                //it doesn't work.
                                focusManager.moveFocus(FocusDirection.Down)
                            }
                        )
                    )

                    Spacer(Spacer)
                    
                    OutlinedTextField(
                        modifier = Modifier
                            .fillMaxWidth()
                            .fillMaxHeight(0.8f),
                        value = field2.value,
                        onValueChange = { field2.value = it },
                        label = { Text("Label2") }
                    )

                    Row(
                        modifier = Modifier.align(Alignment.End),
                        horizontalArrangement = Arrangement.spacedBy(10.dp)
                    ) {

                        TextButton(onClick = { openDialog.value = false }) {
                            Text("CANCEL")
                        }

                        TextButton(onClick = {  }) {
                            Text("OK")
                        }

                    }

                }
            }
        }
    }
}

0 ответов

Другие вопросы по тегам