У меня есть список стран в базе данных.Я создал операцию по выбранной стране, которая состоит из поля для фильтрации и списка, в котором отображается флаг и название страны.
Когда начинается действие, список отображает весь список стран, отсортированных в алфавитном порядке - работает нормально.Когда клиент начинает вводить текст в поле поиска, я хочу, чтобы список был отфильтрован по типу ввода.Мой запрос к базе данных ранее работал в AutoCompleteView (я просто хочу переключиться на отдельное текстовое поле и список), поэтому я знаю, что мой полный запрос и мой запрос на ограничение работают.Что я сделал, так это добавил TextWatcher в представление EditText, и каждый раз, когда текст изменяется, я вызываю SimpleCursorAdapter списка runQueryOnBackgroundThread с текстом полей редактирования в качестве ограничения.Беда в том, что список никогда не обновляется.Я установил точки останова в отладчике, и TextWatcher делает вызов runQueryOnBackgroundThread, и мой FilterQueryProvider вызывается с ожидаемым ограничением.Запрос к базе данных выполняется нормально, и курсор возвращается.
В адаптере курсора установлен поставщик запросов фильтра (и средство просмотра для отображения флага):
SimpleCursorAdapter adapter = new SimpleCursorAdapter (this,
R.layout.country_list_row, countryCursor, from, to);
adapter.setFilterQueryProvider (new CountryFilterProvider ());
adapter.setViewBinder (new FlagViewBinder ());
FitlerQueryProvider:
private final class CountryFilterProvider implements FilterQueryProvider {
@Override
public Cursor runQuery (CharSequence constraint) {
Cursor countryCursor = myDbHelper.getCountryList (constraint);
startManagingCursor (countryCursor);
return countryCursor;
}
}
И у EditText есть TextWatcher:
myCountrySearchText = (EditText)findViewById (R.id.entry);
myCountrySearchText.setHint (R.string.country_hint);
myCountrySearchText.addTextChangedListener (new TextWatcher() {
@Override
public void afterTextChanged (Editable s) {
SimpleCursorAdapter filterAdapter = (SimpleCursorAdapter)myCountryList.getAdapter ();
filterAdapter.runQueryOnBackgroundThread (s.toString ());
}
@Override
public void onTextChanged (CharSequence s, int start, int before, int count) {
// no work to do
}
@Override
public void beforeTextChanged (CharSequence s, int start, int count, int after) {
// no work to do
}
});
Запрос к базе данных выглядит так:
public Cursor getCountryList (CharSequence constraint) {
if (constraint == null || constraint.length () == 0) {
// Return the full list of countries
return myDataBase.query (DATABASE_COUNTRY_TABLE,
new String[] { KEY_ROWID, KEY_COUNTRYNAME, KEY_COUNTRYCODE }, null, null, null,
null, KEY_COUNTRYNAME);
} else {
// Return a list of countries who's name contains the passed in constraint
return myDataBase.query (DATABASE_COUNTRY_TABLE,
new String[] { KEY_ROWID, KEY_COUNTRYNAME, KEY_COUNTRYCODE },
"Country like '%" + constraint.toString () + "%'", null, null, null,
"CASE WHEN Country like '" + constraint.toString () +
"%' THEN 0 ELSE 1 END, Country");
}
}
Просто кажется, что отсутствуетссылка где-тоЛюбая помощь будет оценена.
Спасибо,
Ян