Фильтр для Android ListView - Пробел - PullRequest
5 голосов
/ 23 февраля 2012

Я хочу отфильтровать свой listView с помощью поля EditText и с помощью функции адаптера getFilter(). Это работает просто отлично, пока я не поставлю пробел в текстовом поле.

Редактировать: SimpleAdapter, а не ArrayAdapter

Если мой список содержит следующие слова: {"Apple", "Banana", "Red Apple"} Если я наберу «яблоко», он вернет все элементы, содержащие слово «яблоко» (Apple и Red Apple). Если я наберу «яблоко», оно ничего не вернет.

Есть идеи? Вот код:

searchBox = (EditText) findViewById(R.id.searchBox);

searchBox.addTextChangedListener(filterTextWatcher);

и

private TextWatcher filterTextWatcher = new TextWatcher() {

public void onTextChanged(CharSequence s, int start, int before, int count) {
    // TODO Auto-generated method stub          
}

public void beforeTextChanged(CharSequence s, int start, int count,
            int after) {
    // TODO Auto-generated method stub          
}

public void afterTextChanged(Editable s) {
    // TODO Auto-generated method stub
    myAdapter.getFilter().filter(s.toString());
}
};

Ответы [ 2 ]

2 голосов
/ 15 ноября 2012

Если функциональность фильтрации из SimpleAdapter не соответствует вашим требованиям к фильтрации, вам необходимо переопределить SimpleAdapter и реализовать свои собственные требования к фильтрации.

Для этого требуется много кода, так как Filter в SimpleAdapterиспользует много частных объектов, которые вам нужно будет скопировать.То же самое относится к ArrayAdapter

К счастью, кто-то еще (@ uʍop ǝpısdn) уже пошел в процесс, написал код и сделал его доступным для сообщества.

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

С уважением.

2 голосов
/ 23 февраля 2012

Попробуйте использовать это:

myAdapter.getFilter().filter(s.toString().trim());
...