2010-02-16 74 views
1

我有一個CheckboxField []元素的數組,我需要動態初始化。我的示例代碼是 -黑莓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(布爾) 我試過chkboxField [0] .setFont(),chkboxField.getChecked(),他們都似乎工作。

回答

3

因此,顯然發生的事情是boxField[i].setChecked(false)再次調用FieldChangeListener,並且這個循環會無限循環,直到堆棧打開。

我被告知使用

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

根據在FieldChanged方法您的意見,這聽起來像你有互斥的複選框(也就是,你有一組複選框,並在任何一個被選中,所有其他的應該被取消選中)。

如果是這樣,您可能需要考慮使用RadioButtonField來代替。您可以將您的單選按鈕粘貼到RadioButtonGroup,然後黑莓會爲您取消選中。

+0

我想做單選按鈕,但用戶界面似乎更好看當使用複選框,我不想創建自定義單選按鈕,因爲這似乎是一個更簡單的選擇:S – 2010-02-19 05:23:44