2012-01-13 1 views
0

Я хочу задать небольшой вопрос. Я хочу знать, как лучше всего фильтровать представление списка, которое я заполняю из базы данных sqlite, и я хочу отфильтровать его в зависимости от введенных букв пользователя в текстовом редакторе. Я не показываю никакого кода, потому что у меня есть только SQL-выражения и все. Мне нужно изменить оператор sqlite, который я использую, чтобы заполнить базу данных.Просмотр списка фильтров Android в зависимости от ввода в формате edittext с операторами sql

Итак, мой вопрос: как я могу изменить свой оператор sqlite, когда пользователь вводит буквы в текстовом редакторе, и как я могу обновить свой список с новыми данными, отфильтрованными с помощью нового оператора sql.

ответ

0

Проверьте ответ на предыдущий вопрос, они очень похожи: search bar

0

Я была такая же проблема и решить ее следующим образом:

//Search text and changed handler 
     EditText tbSearch = (EditText)findViewById(R.id.android_searchbox); 
     tbSearch.addTextChangedListener(new TextWatcher() { 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
      } 

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

      public void afterTextChanged(Editable s) { 
       ListView av = getListView(); 
       SimpleCursorAdapter filterAdapter = (SimpleCursorAdapter)av.getAdapter(); 
       filterAdapter.getFilter().filter(s.toString()); 
      } 
     }); 

     entries.setFilterQueryProvider(new FilterQueryProvider() { 
      public Cursor runQuery(CharSequence constraint) { 
       return mDbHelper.fetchAllEntries(constraint); 
      } 
     }); 

При таком подходе вам потребуется метод, аналогичный FetchAllEntries (строка sFilter)

/* 
* Override to return a Cursor over the list of Entries filtered by a 
* constraint 
* 
* @return Cursor over filtered Entries 
*/ 
public Cursor fetchAllEntries(CharSequence constraint) { 

    if (constraint == null || constraint.length() == 0) { 
     // Return the full list 
     return fetchAllEntries(); 
    } else { 

     String value = "%" + constraint.toString() + "%"; 

     String[] columns = new String[] { KEY_ROWID, KEY_TITLE, 
       KEY_BODY, KEY_USER_PROFICIENCY }; 

     return mDb.query(DATABASE_TABLE, columns, 
       KEY_TITLE + " like ? OR " + KEY_BODY + " like ? ", new String[] { value, value }, null, null, 
       KEY_TITLE + " ASC "); 

    } 
} 

Здесь у меня есть таблица с две колонки (название, корпус)

+0

Любые идеи, как я могу заставить это работать с BaseAdapter. Поскольку адаптер, который я использую, представляет собой реализацию ленивой загрузки, и он расширяет BaseAdapter. –

+0

хм .. жаль, что я не знаю много о типах адаптеров, но на основе [того, что я читал] (http://www.vogella.de/articles/AndroidListView/article.html), для чего создан SimpleCursorAdapter. Работа с базой данных напрямую .. –

 Смежные вопросы

  • Нет связанных вопросов^_^