23
我想過濾一個SimpleCursorAdapter驅動的ListView,它上面有一個EditText框。我有下面的代碼,但是當我輸入框時,什麼也沒有發生;完整列表繼續顯示。我究竟做錯了什麼?ListView,SimpleCursorAdapter,一個EditText過濾器 - 它爲什麼不做任何事情?
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);
}
});
而這裏的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");
}
}
我已經想盡例子並回答我遇到我的搜索,但都無濟於事。正如你可以想象的那樣令人沮喪。在此先感謝任何可以幫助的人!
我真的不知道這個論點是幹什麼的。我從我發現的一個例子中複製了這一點,並且當時太累了以找出那個部分做了什麼,所以我將它留下了。但是,如果過濾器工作並且該查詢有問題,那麼不應該ListView至少改變反正有什麼辦法?我會嘗試你的建議並回報。 – LouieGeetoo 2011-03-16 16:55:15
這是你的建議!你不知道我有多開心。我整個時間都很親密。非常感謝! – LouieGeetoo 2011-03-17 06:25:00
這是什麼mDB?使用與用於SimpleCursorAdapter的數據庫幫助程序相同的數據庫幫助程序給我一個「fillWindow()中的無效語句錯誤」 在我的列表活動中,我使用了一個mDbHelper實例,它是我的DatabaseHelper。我調用了c = mDbHelper.fetchAllFriends(),後面跟着我的listActivity的onCreate中的startManagingCursor()。 我應該爲runQuery()中的調用聲明一個mDbHelper的新實例嗎? – rohitmishra 2012-02-24 13:40:02