我有一个CheckboxField []元素数组,我需要动态初始化。我的示例代码是 -
class abc extends MainScreen implements FieldChangeListener {
CheckboxField[] boxField;
abc() {
.
.
.
boxField = new CheckboxField[length];
VerticalFieldManager vfm = new VerticalFieldManager();
for(int i=0; i<length; i++) {
boxField[i] = new CheckboxField(var[i], false);
boxField[i].setChangeListener(this);
vfm.add(boxField[i]);
}
add(vfm);
}
public void fieldChanged(Field field, int context) {
// The idea is to disable all the other checkboxes when one
// is clicked.
boxField[0].setChecked(false); // Gives stackoverflow error on JVM.
}
}
有任何帮助吗?
编辑:问题似乎只有.setChecked(boolean) 我试过chkboxField [0] .setFont(),chkboxField.getChecked(),它们似乎都有效。
答案 0 :(得分:3)
所以,显然正在发生的事情是boxField[i].setChecked(false)
再次调用FieldChangeListener,这会无限循环直到堆栈爆炸。
我被告知要使用
if(context != FieldChangeListener.PROGRAMMATIC) {
boxField[i].setChecked(false);
}
答案 1 :(得分:0)
根据你在FieldChanged方法中的注释,听起来你有相互排斥的复选框(也就是说,你有一组复选框,当选中任何一个复选框时,所有其余复选框都应该取消选中)。
如果是这样,您可能需要考虑使用 RadioButtonField 。您可以将单选按钮粘贴到 RadioButtonGroup 中,然后BlackBerry会为您取消选中。