Возврат к ListView с текстовым фильтром - PullRequest
0 голосов
/ 06 февраля 2010

Я включил фильтрацию текста в моем ListView ожидаемым образом; добавив android:textFilterEnabled=”true” в определение ресурса и (как я использую SimpleCursorAdapter) установив FilterQueryProvider, который предоставляет отфильтрованный курсор, например:

public Cursor runQuery(CharSequence constraint) {
    Cursor cur = mDba.fetchTrackers(mCurrentGroupId, constraint.toString());
    startManagingCursor(cur);
    return cur;
}

У меня такой вопрос: как только пользователь выбирает элемент списка, переходит к другому действию и возвращается к этому, как я могу контролировать состояние ранее примененного фильтра?

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

То, что я хотел бы сделать, это либо очистить фильтр, либо оставить отфильтрованный курсор, с которым было оставлено действие.

1 Ответ

3 голосов
/ 06 мая 2010

У меня была такая же проблема, хотя вместо установки FilterQueryProvider в SimpleCursorAdapter я использовал метод overidden runQueryOnBackgroundThread(CharSequence constraint) при создании экземпляра SimpleCursorAdapter.
Например.

SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.list, cursor, from, to) {  

   @Override  
   public Cursor runQueryOnBackgroundThread(CharSequence constraint){  
      Cursor cur = mDba.fetchTrackers(mCurrentGroupId, constraint.toString());
      startManagingCursor(cur);  
      return cur;  
   }  
};

Но если вы хотите очистить фильтр, все, что вам нужно сделать, это получить ListView и вызвать его метод clearTextFilter(). Поэтому, если ваша активность расширяется ListActivity, вы можете использовать следующее:

ListView lv = getListView();    
lv.clearTextFilter();

Добавьте приведенные выше строки в метод, в котором вы повторно загружаете данные в список, то есть каждый раз, когда отображается ваш ListActivity.

В качестве альтернативы, если вы хотите сохранить фильтр активным и повторно применить его к ListActivity, когда пользователь вернется к нему. Вы можете получить текущий введенный текст фильтра из ListActivity как CharSequence и передать его текущему Filter *1022*:

adapter.getFilter().filter(lv.getTextFilter());

Снова добавьте вышеупомянутые строки в метод, в котором вы повторно загружаете данные в список, и он повторно применит существующий фильтр.

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