views:

783

answers:

1

Hi,

How can all checked items from a list can be fetched?

I need to get all selected (checked) items from the list and populate a vector ...

I am not getting all selected items, i am getting only the item on which current focus is...

I am implementing listfield with checkboxes as per the knowledgebase article.

If I use getSelection(), it is returning me the currently highlighted list row index, and not all that have been checked.

Please help ...

+1  A: 

As I undestood, sample is How To - Create a ListField with check boxes

Then you can add Vector to the class where ListFieldCallback is implemented:

private Vector _checkedData = new Vector();
public Vector getCheckedItems() {
     return _checkedData;
    }

and update drawListRow this way:

if (currentRow.isChecked())
{
    if( -1 ==_checkedData.indexOf(currentRow))
     _checkedData.addElement(currentRow);
    rowString.append(Characters.BALLOT_BOX_WITH_CHECK);
}
else
{
    if( -1 !=_checkedData.indexOf(currentRow))
     _checkedData.removeElement(currentRow);
    rowString.append(Characters.BALLOT_BOX);
}


If you would use VerticalFieldManager with custom CheckBoxField, you could iterate over all fields on screen (or any manager) and check if its' checkbox field, then take a value:

class List extends VerticalFieldManager {
...
    public Vector getCheckedItems() {
     Vector result = new Vector();
     for (int i = 0, cnt = getFieldCount(); i < cnt; i++) {
      Field field = getField(i);
      if (field instanceof CheckBoxField) {
       CheckBoxField checkBoxField = (CheckBoxField) field;
       if (checkBoxField.isChecked())
        result.addElement(checkBoxField);
      }
     }
     return result;
    }
}
Max Gontar