2011-07-15 31 views
5

Tôi đang cố gắng triển khai trình cuộn nhanh với AlphabetIndexer, nhưng khi con trỏ thay đổi, nó không làm mới bộ đệm chỉ mục. Trong constructor CursorAdapter tôi gọi setCursor(cursor) nhưng không thay đổi, và theo công tài liệu:AlphabetIndexer setCursor không cập nhật bộ nhớ cache

bộ chuyển đổi của bạn là trách nhiệm cập nhật con trỏ bằng cách gọi setCursor (Cursor) nếu những thay đổi con trỏ. phương thức getPositionForSection (int) thực hiện tìm kiếm nhị phân cho chỉ mục bắt đầu của một phần nhất định (bảng chữ cái).

Nhưng không có gì xảy ra. Tôi đang sử dụng bộ lọc tìm kiếm này, vì vậy khi tôi tìm kiếm danh bạ, nó sẽ cập nhật danh sách với các liên hệ, do đó, AlphabetIndexer sẽ hoạt động để cập nhật chỉ mục của các mục mới trong danh sách.

Ví dụ: Toàn bộ danh sách của tôi bắt đầu bằng các liên hệ bắt đầu bằng 'A' và kết thúc bằng các liên hệ bắt đầu bằng 'E'. Vì vậy, AlphabetIndexer sẽ có các chỉ số này trong bộ nhớ cache của nó.

Nhưng, hãy thử tìm kiếm địa chỉ liên hệ bằng 'C' và cho phép nói rằng tôi có 250 địa chỉ liên hệ bắt đầu bằng 'C'. Vì vậy, tôi phải nhanh chóng cuộn qua các liên hệ này và chỉ mục 'C' phải hiển thị, nhưng thay vì chỉ 'C', nó hiển thị tất cả các chỉ mục, được hiển thị khi tôi có toàn bộ danh sách.

Đây là constructor CursorAdapter của tôi, nơi tôi gọi setCursor (con trỏ) cho mỗi lá thư tôi gõ:

public MyCursorAdapter(Context context, Cursor cursor, ArrayList<Integer> ids) 
     { 
      super(context, cursor); 
      try 
      { 
       mAlphaIndexer = new AlphabetIndexer(cursor, cursor.getColumnIndexOrThrow("Name")," ABCDEFGHIJKLMNOPQRSTUVWXYZ"); 
       notifyDataSetChanged(); 
       mAlphaIndexer.setCursor(cursor);   
       this.mSelectedContacts = ids;    
       Log.e("MyCursorAdapter", "construtor: "); 
      } 
      catch(Exception ex) 
      { 
       Log.e("MyCursorAdapter", "Error: " + ex); 
      } 
      finally 
      { 
       mAlphaIndexer.setCursor(cursor); 
      } 
     } 
+0

Tôi đang làm một cái gì đó tương tự Ở đây http://stackoverflow.com/questions/10224233/alphabetindexer-with-custom-adapter-managed-by-loadermanager – toobsco42

Trả lời

3

Tôi đã giải quyết điều này bằng cách gọi này theo thứ tự sau khi tôi đặt adapter:

listView.setFastScrollEnabled(false); 
listView.setFastScrollEnabled(true); 

Điều đó phù hợp với tôi.

+1

tính năng này không hoạt động với KITKAT :) –

0

gọi setContentView(R.layout.whatever) và sau đó điền lại ListView bằng bộ điều hợp mới/dữ liệu mới của bạn. Điều này sẽ vẽ lại ListView với các mục mới của bạn và Lớp phủ FastScroll sẽ xuất hiện ở đúng vị trí.

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