0

我正在尝试在其下方显示一个 TextField 和一个 ListField:

在此处输入图像描述

我想过滤(又名“实时搜索”)显示的行数,同时用户在 TextField 中输入一个单词。

我试过调用ListField.setSearchable(true)但它不会改变任何东西,即使我在 ListField 集中时键入单词也是如此。

顺便说一句,我想知道要采用哪个 TextField 。我使用了 AutoCompleteField,因为它看起来完全符合我想要的字段(带圆角的白色字段),但它可能不是最佳选择(因为我在键入时不需要 AutoCompleteField 的下拉列表)。

这是我当前的代码 -

MyScreen.java:

private ListField presetListField = new ListField();
private MyList presetList = new MyList(presetListField);

private MyScreen() {
    int size;

    getMainManager().setBackground(_bgOff);
    setTitle("Favorites");

    BasicFilteredList filterList = new BasicFilteredList();        
    String[] days = {"Monday", "Tuesday", "Wednesday",
                     "Thursday", "Friday", "Saturday", "Sunday"};
    int uniqueID = 0;
    filterList.addDataSet(uniqueID, days, "days", 
        BasicFilteredList.COMPARISON_IGNORE_CASE);

    // XXX probably a bad choice here?
    AutoCompleteField autoCompleteField = 
        new AutoCompleteField(filterList);
    add(autoCompleteField);        

    presetListField.setEmptyString("* No Favorites *", DrawStyle.HCENTER);
    add(presetListField);

    presetList.insert("Monday");
    presetList.insert("Tuesday");
    presetList.insert("Wednesday");
    for (int i = 0; i < 16; i++) {
        presetList.insert("Favorite #" + (1 + i));
    }
}

MyList.java:

public class MyList implements ListFieldCallback {
    private Vector _preset = new Vector();
    private ListField _list;

    public MyList(ListField list) {
        _list = list;
        _list.setCallback(this);
        _list.setRowHeight(-2);
        // XXX does not seem to have any effect
        _list.setSearchable(true);
    }

    public void insert(String str) {
        insert(str, _preset.size());
    }

    public void insert(String str, int index) {
        _preset.insertElementAt(str, index);
        _list.insert(index);
    }

    public void delete(int index) {
        _preset.removeElementAt(index);
        _list.delete(index);
    }

    public void drawListRow(ListField listField, 
      Graphics g, int index, int y, int width) {
        Font f = g.getFont();
        Font b = f.derive(Font.BOLD, f.getHeight() * 2);
        Font i = f.derive(Font.ITALIC, f.getHeight());

        g.setColor(Color.WHITE);
        g.drawText((String)_preset.elementAt(index), Display.getWidth()/3, y);

        g.setFont(i);
        g.setColor(Color.GRAY);
        g.drawText("Click to get frequency", 
           Display.getWidth()/3, y + g.getFont().getHeight());

        g.setFont(b);
        g.setColor(Color.YELLOW);
        g.drawText(String.valueOf(100f + index/10f), 0, y);
     }

     public Object get(ListField list, int index) {
         return _preset.elementAt(index);
     }

     public int indexOfList(ListField list, String prefix, int start) {
         return _preset.indexOf(prefix, start);
     }

     public int getPreferredWidth(ListField list) {
         return Display.getWidth();
     }
}

谢谢!亚历克斯

4

1 回答 1

1

你检查过net.rim.device.api.ui.component.KeywordFilterField吗?

于 2011-04-05T18:51:22.513 回答