ListView, SimpleCursorAdapter, und ein EditText-Filter - warum tut es nichts?

Ich würde gerne filter ein SimpleCursorAdapter-driven ListView mit EditText-Feld rechts oben ist es. Ich habe folgenden code, aber wenn ich in das Feld eingeben, passiert nichts; die vollständige Liste wird weiter angezeigt. Was mache ich falsch?

    mCursor = getDirectoryList(null);

    adapter = new SimpleCursorAdapter(this,
            R.layout.directory_people_item, mCursor,
            new String[]{
                directoryPeople.LAST_NAME,
                directoryPeople.FIRST_NAME,
                directoryPeople.MIDDLE_NAME,
                directoryPeople.JOB_TITLE},
            new int[]{
                R.id.txtLastName,
                R.id.txtFirstName,
                R.id.txtMiddle,
                R.id.txtTitle} 
    ); 

    ListView av = (ListView)findViewById(R.id.listPeople);
    av.setAdapter(adapter);
    av.setFastScrollEnabled(true);
    av.setTextFilterEnabled(true);

    EditText etext=(EditText)findViewById(R.id.search_box);
    etext.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 = (ListView)findViewById(R.id.listPeople);
            SimpleCursorAdapter filterAdapter = (SimpleCursorAdapter)av.getAdapter();
            filterAdapter.getFilter().filter(s.toString());
        }
    });

    adapter.setFilterQueryProvider(new FilterQueryProvider() {
        public Cursor runQuery(CharSequence constraint) {
            return getDirectoryList(constraint);
        }
    });

Und hier ist getDirectoryList():

public Cursor getDirectoryList (CharSequence constraint)  {
    SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
    queryBuilder.setTables(
        directoryPeople.PEOPLE_TABLE
    );

    String asColumnsToReturn[] = { 
            directoryPeople.PEOPLE_TABLE + "."
            + directoryPeople.LAST_NAME + "," +
            directoryPeople.PEOPLE_TABLE + "."
            + directoryPeople.FIRST_NAME + "," +
            directoryPeople.PEOPLE_TABLE + "."
            + directoryPeople.MIDDLE_NAME + "," +
            directoryPeople.PEOPLE_TABLE + "."
            + directoryPeople.JOB_TITLE + "," +
            directoryPeople.PEOPLE_TABLE + "."
            + directoryPeople._ID
    };

    if (constraint == null  ||  constraint.length () == 0)  {
        // Return the full list
        return queryBuilder.query(mDB, asColumnsToReturn, null, null,
                null, null, directoryPeople.DEFAULT_SORT_ORDER);
    }  else  {
        return mDB.query(directoryPeople.PEOPLE_TABLE, asColumnsToReturn, "LAST_NAME like '%'" + 
            constraint.toString() + "'%'", null, null, null,
            "CASE WHEN LAST_NAME like '" + constraint.toString() +
            "%' THEN 0 ELSE 1 END, LAST_NAME");
    }
}

Habe ich versucht, jedes Beispiel und die Antwort habe ich in meinen Recherchen, aber ohne Erfolg. Es ist frustrierend, wie Sie sich vorstellen können. Vielen Dank im Voraus für wer kann helfen!

InformationsquelleAutor der Frage LouieGeetoo | 2011-03-16

Schreibe einen Kommentar