当键盘的 KeyboardType 设置为 KeyboardType.Number 时,我当前无法捕获用户在文本字段中的输入。
如果键盘设置为 KeyboardType.Text,文本字段会按预期更新,但是当设置为 KeyboardType.Number 时,文本字段将无法更新。
这是为什么呢?以及如何更改我的代码,以便当单击文本字段时,显示数字键盘,并且当按下数字时,相关数字会在文本字段中更新。
以下代码不会更新文本字段(当设置为 KeyboardType.Number 时)...
@Composable
fun MyNumberField() {
var text = remember { mutableStateOf("")}
val change : (String) -> Unit = { it ->
value.value = it
}
TextField(
value = text.value,
modifier = Modifier.fillMaxWidth(),
keyboardOptions = KeyboardOptions.Default.copy(keyboardType = KeyboardType.Number),
onValueChange = change
)
}
以下代码确实更新了文本字段(当设置为 KeyboardType.Text 时)...
@Composable
fun MyNumberField() {
var text = remember { mutableStateOf("")}
val change : (String) -> Unit = { it ->
text.value = it
}
TextField(
value = value.value,
modifier = Modifier.fillMaxWidth(),
keyboardOptions = KeyboardOptions.Default.copy(keyboardType = KeyboardType.Text),
onValueChange = change
)
}
非常感谢
您应该更新
text.value
,而不是value.value
您的代码中存在拼写错误,请将其更改为此。
@Composable
fun MyNumberField() {
var text = remember { mutableStateOf("")}
val change : (String) -> Unit = { it ->
value.value = it // you have this which is not correct and I don't think it even compiled
text.value = it // it is supposed to be this
}
TextField(
value = text.value,
modifier = Modifier.fillMaxWidth(),
keyboardOptions = KeyboardOptions.Default.copy(keyboardType = KeyboardType.Number),
onValueChange = change
)
}
我会更进一步,使用 MutableIntState 并检查所有输入的文本是否都是 Int。
@Composable
fun MyNumberField() {
var number = remember { mutableIntStateOf("")}
val change : (String) -> Unit = { it ->
number = it.toIntOrNull() ?: number
}
...