BlackBerry 6: как перейти к новому элементу в KeywordFilterList? - PullRequest
0 голосов
/ 08 апреля 2011

SearchFieldDemo хорошо работает для меня, но имеет одну проблему: когда вы добавляете новую страну в KeywordFilterList через меню и этот новый элемент находится внизу отсортированного списка, тогда пользователь не ничего не вижу и не уверен, был ли добавлен новый элемент или нет.

Решением было бы заставить KeywordFilterList перейти к новому элементу , но я не могу понять, как это сделать. Я пробовал:

void addElementToList(Country country)
{       
    _countryList.addElement(country);
    _keywordFilterField.updateList();

    int index = _countryList.getIndex(country);
    System.err.println("XXX index: " + index);
    _keywordFilterField.setSelectedIndex(index);
}   

Но это не имеет никакого эффекта: напечатанный index правильный и KeywordFilterList прокручивается, но не в правильное место.

Есть идеи, пожалуйста? Алекс

1 Ответ

0 голосов
/ 08 апреля 2011

В примере приложения вы могли заметить строку _keywordFilterField.setKeyword(""); как первое, что они делают перед добавлением нового элемента в список. Это гарантирует, что новый элемент будет виден в списке. В противном случае при применении какого-либо фильтра в списке может не отображаться новый элемент.

Так что в вашем коде похоже, что вы не справляетесь с этим. В результате индекс, который вы получаете с int index = _countryList.getIndex(country);, может не совпадать с индексом, видимым в текущем списке ключевых слов. Кстати, чтобы найти индекс в видимом списке, вы можете использовать ReadableList, который можно получить с помощью _keywordFilterField.getResultList().

Таким образом, рабочий процесс может быть следующим:

  1. сбросить ключевое слово на _keywordFilterField.setKeyword(""); - теперь фильтрация не применяется, поэтому в видимом списке должен быть новый элемент.
  2. добавить новый элемент в базовую коллекцию - _countryList.addElement(country);
  3. вызовите _keywordFilterField.updateList();, чтобы обновить ListField.
  4. , чтобы быть в безопасности, найдите индекс для прокрутки, используя коллекцию, полученную путем вызова _keywordFilterField.getResultList()
  5. выберите новый элемент с помощью _keywordFilterField.setSelectedIndex(index);
...