黑莓 - 从列表中选中带复选框的选中项目

时间:2009-07-27 04:07:36

标签: user-interface blackberry java-me listfield

如何获取列表中所有已检查的项目?

我需要从列表中获取所有选中(已选中)项目并填充矢量。

我没有收到所有选定的项目,我只获得当前关注的项目。

我正在根据知识库文章实现带有复选框的listfield。

如果我使用getSelection(),它会返回当前突出显示的列表行索引,而不是所有已经检查过的内容。

2 个答案:

答案 0 :(得分:3)

我不知道,样本是How To - Create a ListField with check boxes

然后,您可以将Vector添加到实现ListFieldCallback的类中:

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

并以这种方式更新drawListRow:

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);
}

如果你将VerticalFieldManager与自定义CheckBoxField一起使用,你可以迭代屏幕上的所有字段(或任何管理器)并检查它的'复选框字段,然后取值:

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;
    }
}

答案 1 :(得分:0)

@桑德亚-M

class List extends VerticalFieldManager {
...
    public void selectAll() {
        for (int i = 0, cnt = getFieldCount(); i < cnt; i++) {
                Field field = getField(i);
                if (field instanceof CheckboxField) {
                        CheckboxField checkboxField = (CheckboxField) field;
                        checkboxField.setChecked(true);
                }
        }
    }
}