2010-01-04 34 views
18

Tôi có một ListView được hỗ trợ bởi SimpleCursorAdapter.Làm cách nào để lọc văn bản một ListView của Android được hỗ trợ bởi SimpleCursorAdapter?

Tôi muốn để có thể lọc danh sách như bạn sẽ một danh sách địa chỉ liên lạc, chỉ cần bằng cách gõ, và tôi đi qua các textFilterEnabled()

Vấn đề là, tôi không thể nhìn thấy làm thế nào để có được nó để làm việc với SimpleCursorAdapter.

Điều này có thể thực hiện được không?
Nếu vậy, làm thế nào nó được thực hiện?

Trả lời

7

Phương thức setTextFilterEnabled() không tự động triển khai lọc vì không biết nội dung trong văn bản Cursor của bạn nên được lọc.

Điều này android-developers thread có thêm chi tiết.

Thực ra, có một câu hỏi hay được hỏi vào ngày hôm trước, điều này thực sự rất giống với câu hỏi của bạn; mặc dù nó ban đầu được hỏi làm thế nào để xử lý lọc khi không có bàn phím vật lý trên một thiết bị:

24

Đố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.

+1

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

+2

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

+1

Trạng thái 'm_slvAdapter' cho' m_Adapter'? – r4m

Các vấn đề liên quan