Как текстовый фильтр Android ListView, поддерживаемый SimpleCursorAdapter?

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

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

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

Возможно ли это?
Если да, то как это делается?

Solutions Collecting From Web of "Как текстовый фильтр Android ListView, поддерживаемый SimpleCursorAdapter?"

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

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

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

  • Как динамически обновлять ListView на Android

Для курсора 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); } } 

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

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

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