我想要一个 TextField,当用户点击它时,整个文本会自动被选中(这样他们就可以在不按删除键的情况下替换它)。
因为 onFocusChanged
(和 onTextInputStarted
)在 onValueChange
之前被调用,并且 onValueChange
总是在焦点上被调用,所以我必须防止运行 onValueChange
一次。以下是我使用变量 (valueChangeLock
) 的方法:
var value by remember { mutableStateOf(TextFieldValue("")) }
// onValueChange is called after onFocusChanged, overriding the selection in onFocusChanged.
// Fix: Lock onValueChange when calling onFocusChanged
var valueChangeLock = false
BasicTextField(
value = value,
onValueChange = {
if (valueChangeLock) {
valueChangeLock = false
} else {
value = TextFieldValue(it.text, TextRange(it.text.length))
}
},
modifier = modifier.onFocusChanged {
if (it.isFocused) {
valueChangeLock = true
tfValue = TextFieldValue(value, TextRange(0, value.length))
}
},
)
有没有更好的方法来实现这一点?
答案 0 :(得分:0)
您可以使用 Modifier.clickable 界面来简化此操作。
const requests = [
this.myService.getStronglyTypedData1(),
this.myService.getStronglyTypedData2()
];
forkJoin(requests)
.subscribe(([data1, data2]: [StrongData1[], StrongData2[]]) => {
this.stronglyTypedData1 = data1;
this.stronglyTypedData2 = data2;
this.isLoaded = true;
});
还可以考虑将您的文本包裹在 SelectionContainer