Blackberry CheckboxField [] - FieldChangeListener - Ошибка переполнения стека - PullRequest
1 голос
/ 16 февраля 2010

У меня есть массив элементов 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 (булево) Я попытался chkboxField [0] .setFont (), chkboxField.getChecked (), оба они, кажется, работают.

Ответы [ 2 ]

3 голосов
/ 17 февраля 2010

Итак, по-видимому, boxField[i].setChecked(false) снова вызывает FieldChangeListener, и этот цикл повторяется бесконечно, пока стек не дует.

Мне сказали использовать

if(context != FieldChangeListener.PROGRAMMATIC) {
   boxField[i].setChecked(false); 
}
0 голосов
/ 19 февраля 2010

Исходя из вашего комментария в методе FieldChanged, создается впечатление, что у вас есть взаимоисключающие флажки (то есть у вас есть группа флажков, и когда любой из них установлен, все остальные должны быть отключены).

Если это так, вы можете рассмотреть возможность использования RadioButtonField . Вы можете вставить свои радиокнопки в RadioButtonGroup , и тогда BlackBerry позаботится о том, чтобы отменить их для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...