2010-02-16 2 views
1

У меня есть массив элементов CheckboxField [], которые мне нужно динамически инициализировать. Мой код -Blackberry CheckboxField [] - FieldChangeListener - Ошибка Stackoverflow

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(), оба они работают.

ответ

3

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

мне сказали, чтобы использовать

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

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

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

+0

Я хотел сделать радиокнопки, но пользовательский интерфейс, по-видимому, лучше смотрелся при использовании флажков, и я не хотел создавать пользовательские переключатели, поскольку это казалось гораздо более простой альтернативой: S –

Смежные вопросы