BlackBerry - 带有复选框和搜索条件的列表

发布于 2024-07-28 23:35:38 字数 86 浏览 2 评论 0原文

我正在尝试显示带有复选框的数据列表,其中用户可以一次选择多个项目... 我想要在列表顶部有一个搜索字段,用于搜索列表...

我该怎么做?

I am trying to display a list of data with checkboxes, where user can select multiple items at one time...
I want a search field on top of the list which will search through the list...

How do I do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

如果没结果 2024-08-04 23:35:38

说明

首先,创建一个包含所有列表字段的向量,以便您可以随时在屏幕上添加和删除它们。 创建屏幕时,将它们全部添加到列表控件中。

现在,假设您有这些 EditFields 之一 - 您的搜索字段。 您可以为其设置侦听器并捕获文本更改事件。

在这种情况下,您可以从列表控件中删除所有字段,从搜索字段中获取文本值,迭代所有字段向量并将满足搜索条件的字段添加到列表控件中。

代码

LookupList 控件:

public class LookupList extends VerticalFieldManager {

    Vector mItems = null;

    public LookupList() {
        super();
        mItems = new Vector();
    }

    public void addItem(Field itemField) {
        String cookie = (String) itemField.getCookie();
        if (null == cookie)
            throw new IllegalArgumentException(
                    "String cookie must be set to lookupList field");
        mItems.addElement(itemField);
        add(itemField);
    }

    public void removeItem(int index) {
        Field itemField = (Field) mItems.elementAt(index);
        mItems.removeElement(itemField);
        delete(itemField);
    }

    public void lookup(String searchValue) {
        deleteAll();
        for (int i = 0, count = mItems.size(); i < count; i++) {
            Field field = (Field) mItems.elementAt(i);
            String cookie = (String) field.getCookie();
            if (cookie.startsWith(searchValue))
                add(field);
        }
    }
}

使用示例:

class Scr extends MainScreen implements FieldChangeListener {
    LookupList mList = null;
    BasicEditField mEdit = null;

    public Scr() {
        super();

        mEdit = new BasicEditField();
        add(mEdit);

        mEdit.setChangeListener(this);

        mList = new LookupList();
        for (int i = 0; i < 100; i++) {
            LabelField label = new LabelField("Lookup field #"
                    + String.valueOf(i));
            label.setCookie(String.valueOf(i));
            mList.addItem(label);
        }

        add(mList);
    }

    public void fieldChanged(Field field, int context) {
        if (field == mEdit)
            mList.lookup(mEdit.getText());
    }
}

PS

  • 您可以将任何 Field 后代类添加到列表(Edit/Label/CustomCheckBos 等),但它应该有一个带有要搜索值的字符串 cookie。
  • 您可以更改逻辑以按字段标签、文本或自定义属性进行搜索。

Explanation

First, create a vector with all list fields, so you will be able to add and remove them on screen at any time. When you create screen, add them all to list control.

Now, lets say you have one of those EditFields - your search field. You can set a listener for it and catch text change event.

On that event you can remove all fields from list control, take text value from search field, iterate all fields vector and add those which meet search criteria to list control.

Code

LookupList control:

public class LookupList extends VerticalFieldManager {

    Vector mItems = null;

    public LookupList() {
        super();
        mItems = new Vector();
    }

    public void addItem(Field itemField) {
        String cookie = (String) itemField.getCookie();
        if (null == cookie)
            throw new IllegalArgumentException(
                    "String cookie must be set to lookupList field");
        mItems.addElement(itemField);
        add(itemField);
    }

    public void removeItem(int index) {
        Field itemField = (Field) mItems.elementAt(index);
        mItems.removeElement(itemField);
        delete(itemField);
    }

    public void lookup(String searchValue) {
        deleteAll();
        for (int i = 0, count = mItems.size(); i < count; i++) {
            Field field = (Field) mItems.elementAt(i);
            String cookie = (String) field.getCookie();
            if (cookie.startsWith(searchValue))
                add(field);
        }
    }
}

Usage sample:

class Scr extends MainScreen implements FieldChangeListener {
    LookupList mList = null;
    BasicEditField mEdit = null;

    public Scr() {
        super();

        mEdit = new BasicEditField();
        add(mEdit);

        mEdit.setChangeListener(this);

        mList = new LookupList();
        for (int i = 0; i < 100; i++) {
            LabelField label = new LabelField("Lookup field #"
                    + String.valueOf(i));
            label.setCookie(String.valueOf(i));
            mList.addItem(label);
        }

        add(mList);
    }

    public void fieldChanged(Field field, int context) {
        if (field == mEdit)
            mList.lookup(mEdit.getText());
    }
}

PS

  • you can add any Field descendend class to list (Edit/Label/CustomCheckBos etc), but it should have a string cookie with value to search.
  • you can change logic to search by Field label, text or custom property.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文