【问题标题】:BlackBerry - List with checkbox along with search criteria黑莓 - 带有复选框的列表以及搜索条件
【发布时间】:2009-07-22 06:48:30
【问题描述】:

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

我该怎么做?

【问题讨论】:

    标签: user-interface blackberry checkbox lookup listfield


    【解决方案1】:

    说明

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

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

    在该事件中,您可以从列表控件中删除所有字段,从搜索字段中获取文本值,迭代所有字段向量并将符合搜索条件的字段添加到列表控件中。

    代码

    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,其中包含要搜索的值。
    • 您可以更改逻辑以按字段标签、文本或自定义属性进行搜索。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 2013-04-06
      • 1970-01-01
      • 2018-10-13
      相关资源
      最近更新 更多