Текстовый фильтр: странное поведение с SimpleCursorAdapter - PullRequest
1 голос
/ 26 октября 2010

У меня проблема с фильтром в моем списке. На самом деле это работает довольно хорошо с IndexAdapter, но не с SimpleCursorAdapter.

В следующем примере, если isCursor == false, фильтр работает довольно хорошо но если это == true, фильтр не работает!

Кстати, адаптер работает довольно хорошо.

if(isCursor){
    mCursorAdapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_1, stationsCursor, columns, to);
    FilterTextWatcherCursor filterTextWatcher = new FilterTextWatcherCursor(mCursorAdapter);
    filterText.addTextChangedListener(filterTextWatcher);
    this.setListAdapter(mCursorAdapter); 
}

else{
    mIndexAdapter = new MyIndexAdapter<String>(getApplicationContext(),
 R.layout.row_station_picker, elements);
    FilterTextWatcher filterTextWatcher = new FilterTextWatcher(mIndexAdapter);
    filterText.addTextChangedListener(filterTextWatcher);
    this.setListAdapter(mIndexAdapter);
    }

ListView lv = getListView();
lv.setTextFilterEnabled(true);
lv.setFastScrollEnabled(true);

Я действительно не понимаю, где может возникнуть проблема. Для информации, мой FilterTextWatcher:

public class FilterTextWatcherCursor implements TextWatcher {

 private SimpleCursorAdapter adapter; 

 public FilterTextWatcherCursor(SimpleCursorAdapter adapter) {  
  this.adapter = adapter;
 }

 public void afterTextChanged(Editable s) {
 }

 public void beforeTextChanged(CharSequence s, int start, int count,
   int after) {
 }

 public void onTextChanged(CharSequence s, int start, int before,
   int count) {
  adapter.getFilter().filter(s);
 }

}

FilterTextWatcher точно такой же, но я заменил SimpleCursorAdapter на IndexAdapter

Большое спасибо за любую помощь ...

1 Ответ

2 голосов
/ 01 декабря 2010

Я думаю, что вы должны использовать FilterQueryProvider вместо TextWatcher.Следующий код отлично работает

class XXX extends Activty


class TextQuery implements FilterQueryProvider {
  @Override
  public Cursor runQuery(CharSequence arg0) {
    .... build a new select and provide a cursor
   return cursor;
    }
}


@Override
 protected void onCreate(Bundle savedInstanceState) {
 TextQuery textQuery = new TextQuery();
 simpleAdapter.setFilterQueryProvider(textQuery);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...