Я реализую простое приложение, где на странице регистрации пользователь может выбрать категории новостей. Требования нижеИсключение Stackoverflow в Blackberry CheckBoxField
- Все категории являются CheckBoxField. Пользователь должен выбрать хотя бы одну категорию.
- Выбрать все CheckBox позволит выбрать все/отменить выбор всех категорий CheckBox.
- Если пользователь вручную выбирает все поля флажка, то необходимо выбрать флажок «Выбрать все».
Подходы: Я создал категорию в цикле.
for(int i=0;i<interests.length;i++){
allFields[i] = new ColorCheckBoxField(interests[i], false, checkBoxStyle | USE_ALL_WIDTH);
allFields[i].setCookie(i+"");
allFields[i].setFont(bodyFont);
allFields[i].setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
ColorCheckBoxField tempChoice = (ColorCheckBoxField)field;
int index =Integer.parseInt(tempChoice.getCookie().toString().trim());
//set the selection
if(tempChoice.getChecked()){
parent.selectInterest(index);
}
boolean flag = true;
int[] intrests = parent.getSelectedInterest();
for (int i = 0; i < intrests.length; i++) {
if(intrests[i]==0){
flag = false;
}
}
if(flag==true){
selectAll.setChecked(flag); // select all is Checkbox object
}else{
selectAll.setChecked(false);
}
}
});
vfm.add(allFields[i]);
}
Мой SelectAll Флажок логик
selectAll = new ColorCheckBoxField("Select All", false, checkBoxStyle | USE_ALL_WIDTH);
selectAll.setChangeListener(new FieldChangeListener() {
public void fieldChanged(Field field, int context) {
ColorCheckBoxField temp = (ColorCheckBoxField) field;
//if (context == FieldChangeListener.PROGRAMMATIC) {
checkAll(temp.getChecked()); // it loops through all checkbox and set them checked
//}
}
});
innerHfm.add(selectAll);
Я понимаю проблему, ее из-за бесконечный цикл. Я использовал «FieldChangeListener.PROGRAMMATIC», но это не поможет, потому что я хочу, чтобы слушатель поля работал как прагматично, так и вручную. У меня нет возможности исправить. Любой хак поможет мне?
@Eugen .. Определенно +1 ответ. ты спас мой день. –
@SmartTechie спасибо за вопрос такой вопрос .. –
@Eugen спасибо за ответ –