首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Jetpack组合:无法更改TextField焦点

Jetpack组合:无法更改TextField焦点
EN

Stack Overflow用户
提问于 2022-09-16 18:19:52
回答 1查看 233关注 0票数 1

所以,我有一个AlertDialog,里面有一个ListItem,而在里面又有两个TextField

代码语言:javascript
运行
复制
val keyboardController = LocalSoftwareKeyboardController.current
val focusManager = LocalFocusManager.current
val (nameFieldFocus, valueFieldFocus) = remember{FocusRequester.createRefs()}
AlertDialog(
    ...
    text = {
        ListItem(
            ...
            leadingContent = {
                Column(verticalArrangement = Arrangement.spacedBy(10.dp)) {
                    TextField(
                        modifier = Modifier.focusRequester(nameFieldFocus).focusProperties{next = valueFieldFocus}.focusable(),
                        value = someValue,
                        onValueChange = {someValue = it},
                        label = {Text(text = "Some label")},
                        keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next),
                        keyboardActions = KeyboardActions(onNext = {focusManager.moveFocus(FocusDirection.Next)}),
                        singleLine = true
                    )
                    TextField(
                        modifier = Modifier.focusRequester(valueFieldFocus).focusProperties{previous = nameFieldFocus}.focusable(),
                        value = anotherValue,
                        onValueChange = {anotherValue = it},
                        label = {Text(text = "Another label")},
                        keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
                        keyboardActions = KeyboardActions(onDone = {focusManager.clearFocus()}),
                        singleLine = true
                    )
                }
            }
        )
    }
)

问题是,当我按下键盘上的操作键时,无论文本字段中是否包含文本,都不会发生焦点更改。我还尝试了onNext = nullonDone = null,它们应该根据文档使用默认实现,但这也不像预期的那样。

使用androidx.compose.material3.的P.S.

EN

Stack Overflow用户

回答已采纳

发布于 2022-09-17 04:29:21

您应该在val focusManager = LocalFocusManager.current内部调用AlertDialog。另外,移除Modifier.focusable()

代码语言:javascript
运行
复制
AlertDialog(
    text = {

        val focusManager = LocalFocusManager.current

        val (nameFieldFocus, valueFieldFocus) = remember { FocusRequester.createRefs() }


        ListItem(
            leadingContent = {
                Column(verticalArrangement = Arrangement.spacedBy(10.dp)) {
                    TextField(
                        modifier = Modifier
                            .focusRequester(nameFieldFocus)
                            .focusProperties { next = valueFieldFocus },
                        value = someValue,
                        onValueChange = { someValue = it },
                        label = { Text(text = "Some label") },
                        keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next),
                        keyboardActions = KeyboardActions(onNext = {
                            focusManager.moveFocus(
                                FocusDirection.Next
                            )
                        }),
                        singleLine = true
                    )
                    TextField(
                        modifier = Modifier
                            .focusRequester(valueFieldFocus)
                            .focusProperties { previous = nameFieldFocus },
                        value = anotherValue,
                        onValueChange = { anotherValue = it },
                        label = { Text(text = "Another label") },
                        keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
                        keyboardActions = KeyboardActions(onDone = { focusManager.clearFocus() }),
                        singleLine = true
                    )
                }
            },
            headlineText = {
                Text(text = "Headline Text")
            }
        )
    },
    confirmButton = {
        Button(onClick = { /*TODO*/ }) {
            Text(text = "Confirm")
        }
    },
    onDismissRequest = {

    }
)
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73748873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档