Blackberry CheckboxField [] - FieldChangeListener - Stackoverflow错误

时间:2010-02-16 20:12:04

标签: user-interface blackberry checkbox

我有一个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(),它们似乎都有效。

2 个答案:

答案 0 :(得分:3)

所以,显然正在发生的事情是boxField[i].setChecked(false)再次调用FieldChangeListener,这会无限循环直到堆栈爆炸。

我被告知要使用

if(context != FieldChangeListener.PROGRAMMATIC) {
   boxField[i].setChecked(false); 
}

答案 1 :(得分:0)

根据你在FieldChanged方法中的注释,听起来你有相互排斥的复选框(也就是说,你有一组复选框,当选中任何一个复选框时,所有其余复选框都应该取消选中)。

如果是这样,您可能需要考虑使用 RadioButtonField 。您可以将单选按钮粘贴到 RadioButtonGroup 中,然后BlackBerry会为您取消选中。