gpt4 book ai didi

java - Black Berry - 如何避免此 FieldChangeListener.fieldChanged 中的无限循环

转载 作者:行者123 更新时间:2023-11-29 03:42:44 25 4
gpt4 key购买 nike

我需要格式化用户在 EditField 上输入的字符串。这是我的代码:

input = new BorderedEditField(20, BasicEditField.FILTER_NUMERIC);

input.setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
input.setText(pruebaTexto(input.getText()));
}
});

public static String pruebaTexto(String r){
return r+"0";
}

但它以显然是由于无限循环而导致的 stackoverflow 错误结束。代码有什么问题?

最佳答案

您可以通过检查这是否是内部更新来防止递归。对于 Blackberry,这是通过检查 context

的值来完成的
input.setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
if (context != FieldChangeListener.PROGRAMMATIC) {
input.setText(pruebaTexto(input.getText()));
}
}
});

这是一个非黑莓特定的解决方案,适用于任何类型的听众:

input.setChangeListener(new FieldChangeListener() {
private boolean internalCall = false;
public void fieldChanged(Field field, int context) {
if (!internalCall) {
internalCall = true;
try {
input.setText(pruebaTexto(input.getText()));
}
finally {
internalCall = false;
}
}
}
});

关于java - Black Berry - 如何避免此 FieldChangeListener.fieldChanged 中的无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12412377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com