Клавиатура снова открывается после закрытия AlertDialog. ⇐ Android
Клавиатура снова открывается после закрытия AlertDialog.
У меня есть TextField в AlertDialog, и я хочу обрабатывать на нем клавиатуру, но когда я открываю AlertDialog в Compose, клавиатура открывается. но когда я нажимаю кнопку отмены внутри диалогового окна, клавиатура закрывается, но открывается снова. как я могу решить эту проблему?
переопределяет fun onCreateView( надуватель: LayoutInflater, контейнер: ViewGroup?, saveInstanceState: Пакет? ): Вид { return ComposeView(requireContext()).apply { setContent { val viewState с помощью viewModel.state.collectAsState() контроллер val = LocalSoftwareKeyboardController.current val focusRequester = запомнить { FocusRequester() } val focusManager = LocalFocusManager.current val (disputeReason, updateDisputeReason) = помните { mutableStateOf("") } val openDisputeDialog = помните { mutableStateOf (ложь) } LaunchedEffect(key1 = openDisputeDialog.value) { если (!openDisputeDialog.value) { контроллер?.hide() focusManager.clearFocus() } еще { focusRequester.requestFocus() } } Рейтинг var: Плавающее значение по памяти {mutableStateOf(1f)} ComposeMaterial3Theme { если (openDisputeDialog.value) { AlertDialog(onDismissRequest = { openDisputeDialog.value = false }, текст = { Столбец( модификатор = Modifier.fillMaxWidth(), вертикальныйArrangement = Arrangement.spacedBy(16.dp) ) { CustomMultiLineTextField( модификатор = Модификатор .fillMaxWidth() .focusRequester(focusRequester) .heightIn(мин = 140.dp, макс = 300.dp), значение = Причина спора, форма = MaterialTheme.shapes.medium, onValueChange = { updateDisputeReason (оно) } ) } }, кнопки = { Ряд( модификатор = Модификатор .fillMaxWidth() .padding( начало = пространствоСредний, конец = пространствоСредний, дно = пространствоСредний ) ) { ПрозрачнаяКнопка( модификатор = Модификатор .width(spaceFree) .вес(1f) .fillMaxWidth(), toUppercase = ложь, title = stringResource(com.sky.res.R.string.cancel), ) { openDisputeDialog.value = ложь } } }) } PerCaseTabScreen( onOpenDisputeDialog = { selectedReservedCaseToFinish.value = оно updateDisputeReason("") openDisputeDialog.value = true }, состояние = состояние просмотра, ) { } } } } } https://filebin.net/ssjeuwfq2t2d8163
У меня есть TextField в AlertDialog, и я хочу обрабатывать на нем клавиатуру, но когда я открываю AlertDialog в Compose, клавиатура открывается. но когда я нажимаю кнопку отмены внутри диалогового окна, клавиатура закрывается, но открывается снова. как я могу решить эту проблему?
переопределяет fun onCreateView( надуватель: LayoutInflater, контейнер: ViewGroup?, saveInstanceState: Пакет? ): Вид { return ComposeView(requireContext()).apply { setContent { val viewState с помощью viewModel.state.collectAsState() контроллер val = LocalSoftwareKeyboardController.current val focusRequester = запомнить { FocusRequester() } val focusManager = LocalFocusManager.current val (disputeReason, updateDisputeReason) = помните { mutableStateOf("") } val openDisputeDialog = помните { mutableStateOf (ложь) } LaunchedEffect(key1 = openDisputeDialog.value) { если (!openDisputeDialog.value) { контроллер?.hide() focusManager.clearFocus() } еще { focusRequester.requestFocus() } } Рейтинг var: Плавающее значение по памяти {mutableStateOf(1f)} ComposeMaterial3Theme { если (openDisputeDialog.value) { AlertDialog(onDismissRequest = { openDisputeDialog.value = false }, текст = { Столбец( модификатор = Modifier.fillMaxWidth(), вертикальныйArrangement = Arrangement.spacedBy(16.dp) ) { CustomMultiLineTextField( модификатор = Модификатор .fillMaxWidth() .focusRequester(focusRequester) .heightIn(мин = 140.dp, макс = 300.dp), значение = Причина спора, форма = MaterialTheme.shapes.medium, onValueChange = { updateDisputeReason (оно) } ) } }, кнопки = { Ряд( модификатор = Модификатор .fillMaxWidth() .padding( начало = пространствоСредний, конец = пространствоСредний, дно = пространствоСредний ) ) { ПрозрачнаяКнопка( модификатор = Модификатор .width(spaceFree) .вес(1f) .fillMaxWidth(), toUppercase = ложь, title = stringResource(com.sky.res.R.string.cancel), ) { openDisputeDialog.value = ложь } } }) } PerCaseTabScreen( onOpenDisputeDialog = { selectedReservedCaseToFinish.value = оно updateDisputeReason("") openDisputeDialog.value = true }, состояние = состояние просмотра, ) { } } } } } https://filebin.net/ssjeuwfq2t2d8163
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение