Как отфильтровать текстовый список Android ListView, поддерживаемый SimpleCursorAdapter? - PullRequest
18 голосов
/ 05 января 2010

У меня есть ListView, который поддерживается SimpleCursorAdapter.

Я бы хотел иметь возможность фильтровать список, как список контактов, просто набрав, и я наткнулся на textFilterEnabled ()

Проблема в том, что я не мог понять, как заставить его работать с SimpleCursorAdapter.

Возможно ли это вообще?
Если да, то как это сделать?

Ответы [ 3 ]

24 голосов
/ 21 февраля 2011

Для курсора SimpleCursorAdapter вам нужно всего лишь использовать setFilterQueryProvider, чтобы выполнить другой запрос для вашего курсора на основе ограничения:

m_Adapter.setFilterQueryProvider(new FilterQueryProvider() {

  public Cursor runQuery(CharSequence constraint) {
    Log.d(LOG_TAG, "runQuery constraint:"+constraint);
    //uri, projection, and sortOrder might be the same as previous
    //but you might want a new selection, based on your filter content (constraint)
    Cursor cur = managedQuery(uri, projection, selection, selectionArgs, sortOrder);
    return cur; //now your adapter will have the new filtered content
  }

});

Когда добавляется ограничение (например, с помощью TextView), адаптер должен быть отфильтрован:

public void onTextChanged(CharSequence s, int start, int before, int count) {
  Log.d(LOG_TAG, "Filter:"+s);
  if (m_slvAdapter!=null) {
    m_Adapter.getFilter().filter(s);
  }
}

Надеюсь, это поможет. Я постараюсь написать полную статью с исходным кодом в ближайшие несколько дней.

7 голосов
/ 05 января 2010

Метод setTextFilterEnabled() не выполняет автоматическую фильтрацию, поскольку он не знает , что в вашем Cursor тексте, против которого нужно фильтровать.

Эта ветка для разработчиков Android содержит более подробную информацию.

На самом деле, на днях был задан хороший вопрос, который на самом деле очень похож на ваш вопрос; хотя изначально он спрашивал, как обрабатывать фильтрацию, когда на устройстве нет физической клавиатуры:

0 голосов
/ 30 ноября 2010

Я нашел эту статью полезной http://androidcookbook.oreilly.com/Recipe.seam;jsessionid=CE37400B3E545937B70BE2E9F94E78BB?recipeId=404

в основном вы setTextFilterEnabled(true) в своем списке и используете setStringConversionColumn() и setFilterQueryProvider() в своем SimpleCursorAdapter.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...