BlackBerry 6: ListFieldCallback.indexOfList () - как фильтровать при наборе текста? - PullRequest
0 голосов
/ 05 апреля 2011

Я пытаюсь отобразить TextField и ListField под ним:

enter image description here

И я хотел бы отфильтровать (также известный как «живой поиск») количество отображаемых строк, пока пользователь вводит слово в 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();
     }
}

Спасибо! Alex

1 Ответ

1 голос
/ 05 апреля 2011
...