Как фильтровать содержимое SQLite в ListVIew?

Должно получится что-то вроде этого:

введите сюда описание изображения

но фильтрация не происходит:

введите сюда описание изображения

Код PreparationDBHelper:

public class PreparationDBHelper extends SQLiteOpenHelper {

    public static final int DATABASE_VERSION = 1;
    public static final String DATABASE_NAME = "PreparationDb";
    public static final String TABLE_TEXT = "textTable";

    public static final String KEY_ID = "_id";
    public static final String KEY_NAME = "name";
    public static final String KEY_TEXT = "text";

    public PreparationDBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("create table " + TABLE_TEXT + "(" + KEY_ID
                + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL," + KEY_NAME + " text," + KEY_TEXT + " text" + ")");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("drop table if exists " + TABLE_TEXT);

        onCreate(db);
    }

/*    public SQLiteDatabase open()throws SQLException {

        return SQLiteDatabase.openDatabase(DATABASE_NAME, null, SQLiteDatabase.OPEN_READWRITE);
    }*/
}

Код Activity:

    public class CureSearchActivity extends AppCompatActivity {

    PreparationDBHelper sqlHelper;
    SQLiteDatabase db;
    Cursor userCursor;
    SimpleCursorAdapter userAdapter;
    ListView userList;
    EditText userFilter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cure_search);

        userList = (ListView)findViewById(R.id.userList);
        userFilter = (EditText)findViewById(R.id.userFilter);

        sqlHelper = new PreparationDBHelper(getApplicationContext());
        // создаем базу данных
       // sqlHelper.create_db();
    }

    @Override
    public void onResume() {
        super.onResume();
        try {
           // db = sqlHelper.open();
            db = sqlHelper.getReadableDatabase();//чтение базы данных
            userCursor = db.rawQuery("select * from " + PreparationDBHelper.TABLE_TEXT, null);
            String[] headers = new String[]{PreparationDBHelper.KEY_NAME/*, PreparationDBHelper.KEY_TEXT*/};
            userAdapter = new SimpleCursorAdapter(this, android.R.layout.two_line_list_item,
                    userCursor, headers, new int[]{android.R.id.text1/*, android.R.id.text2*/}, 0);

            // если в текстовом поле есть текст, выполняем фильтрацию
            // данная проверка нужна при переходе от одной ориентации экрана к другой
            if(!userFilter.getText().toString().isEmpty())
                userAdapter.getFilter().filter(userFilter.getText().toString());

            // установка слушателя изменения текста
            userFilter.addTextChangedListener(new TextWatcher() {

                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) {

                    userAdapter.getFilter().filter(s.toString());
                }
            });

            // устанавливаем провайдер фильтрации
            userAdapter.setFilterQueryProvider(new FilterQueryProvider() {
                @Override
                public Cursor runQuery(CharSequence constraint) {

                    if (constraint == null || constraint.length() == 0) {

                        return db.rawQuery("select * from " + PreparationDBHelper.TABLE_TEXT, null);
                    }
                    else {
                        return db.rawQuery("select * from " + PreparationDBHelper.TABLE_TEXT + " where " +
                                PreparationDBHelper.DATABASE_NAME + " like ?", new String[]{"%" + constraint.toString() + "%"});
                    }
                }
            });

            userList.setAdapter(userAdapter);
        }
        catch (SQLException ex){}
    }
    @Override
    public void onDestroy(){
        super.onDestroy();
        // Закрываем подключение и курсор
        db.close();
        userCursor.close();
    }
}

Возможно, дело в чтении из бд db = sqlHelper.getReadableDatabase();//чтение базы данных Хотя я и не уверен

Подскажите, пожалуйста, как сделать так, чтобы фильтрация происходила (как на верхнем рисунке)


Ответы (0 шт):