Đối với một con trỏ SimpleCursorAdapter, bạn chỉ cần sử dụng setFilterQueryProvider, chạy truy vấn khác cho con trỏ của bạn, dựa trên chế:
m_Adapter.setFilterQueryProvider(new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
Log.d(LOG_TAG, "runQuery constraint:"+constraint);
//uri, projection, and sortOrder might be the same as previous
//but you might want a new selection, based on your filter content (constraint)
Cursor cur = managedQuery(uri, projection, selection, selectionArgs, sortOrder);
return cur; //now your adapter will have the new filtered content
}
});
Khi một hạn chế được thêm vào (. Ví dụ bằng cách sử dụng một TextView) bộ lọc phải được lọc:
public void onTextChanged(CharSequence s, int start, int before, int count) {
Log.d(LOG_TAG, "Filter:"+s);
if (m_slvAdapter!=null) {
m_Adapter.getFilter().filter(s);
}
}
Hy vọng điều này sẽ hữu ích. Tôi sẽ cố gắng viết một bài báo hoàn chỉnh, với mã nguồn trong vài ngày tới.
Câu trả lời hay, một trong số ít hiển thị phần runQuery với con trỏ - sẽ tốt hơn nếu bạn đưa vào ví dụ về lựa chọn. Ví dụ. selection = FIELD_NAME_TO_FILTER + "like '" + constraint.toString() + "'"; – DEzra
Làm thế nào chúng ta nên gọi một con trỏ trong runQuery nếu chúng ta đang sử dụng một cơ sở dữ liệu SQLite? Sử dụng cùng một cá thể cơ sở dữ liệuHelper như là một trong những được sử dụng để tạo con trỏ cho SimpleCursorAdapter là cho tôi một "Invalid statement in fillWindow()" lỗi. – rohitmishra
Trạng thái 'm_slvAdapter' cho' m_Adapter'? – r4m