从 DataChangedListener 中清除文本时,TextField 键盘会丢失



我有一个文本字段,我可以在上面听按键

TextField msgField = new TextField();
msgField.setSingleLineTextArea(false);
msgField.addDataChangedListener((i1, i2) -> { ... });

我想在按下某个键(回车键(时clear()字段的文本

msgField.addDataChangedListener((i1, i2) -> { 
if(!msgField.getText().isEmpty())
{
String lastChar = msgField.getText().substring(msgField.getText().length()-1);
if(lastChar.equals("n"))
{
msgField.clear();
}
}
});

按下回车键时,此字段上的键盘将关闭,我试图阻止这种情况。我该如何防止这种情况?setText("")(而不是clear()(会产生随机数量的进一步调用DataChanged这会把事情搞砸(我尝试用同步和控制变量包装,也没有成功(。我已经在安卓上测试过了

DataChangedListener很冗长,所以你不应该过分依赖它的低级行为。换句话说,我不确定为什么clear()不发送事件,但有可能它应该......你需要在你的DataChangedListener中防止这种情况。

如果要重新打开虚拟键盘,只需在文本字段上使用startEditingAsync,这将重新启动文本字段。请注意,clear显式停止编辑作为调用setText,而编辑可能会产生不一致的结果,因为用户可能在本机 UI 线程上键入某些内容,而你正在尝试从 EDT 覆盖他。停止进行更改对于同步本机/轻量级组件至关重要。

最新更新