开发者

BlackBerry 6: ListFieldCallback.indexOfList() - how to filter while typing?

I'm trying to display a TextField and a ListField below it:

BlackBerry 6: ListFieldCallback.indexOfList() - how to filter while typing?

And I would like to filter (aka "live search") the number of displayed rows, while the user is typing a word into the TextField.

I've tried calling ListField.setSearchable(true) but it doesn't change anything, even if I type words while having the ListField focussed.开发者_运维问答

And by the way I wonder which TextField to take. I've used AutoCompleteField because it looks exactly as I want the field to be (white field with rounded corners), but it is probably not the best choice (because I don't need AutoCompleteField's drop down list while typing).

Here is my current code -

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

Thank you! Alex


Have you checked the net.rim.device.api.ui.component.KeywordFilterField ?

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜