AlphabetIndexer setCursor不更新其缓存

rog*_*gcg 5 android android-listview android-cursor

我正在尝试用AlphabetIndexer实现一个快速滚动条,但是当光标改变时,它没有刷新索引chache.在我的CursorAdapter构造函数中,我调用setCursor(cursor)但没有任何更改,并根据文档:

如果光标发生变化,您的适配器负责通过调用setCursor(Cursor)来更新光标.getPositionForSection(int)方法执行二进制搜索给定部分(字母表)的起始索引.

但什么都没发生.我将其用于搜索过滤器,因此当我搜索联系人时,它会使用联系人更新列表,因此AlphabetIndexer应该用于更新列表中新项目的索引.

示例:我的整个列表以以"A"开头的联系人开头,以以"E"开头的联系人结束.所以AlphabetIndexer会在其缓存中包含这些索引.

但是,让我们尝试使用'C'搜索联系人,并假设我有250个以'C'开头的联系人.所以,我必须快速滚动浏览这些联系人,并且'C'索引必须显示,但不是只有'C'它显示所有索引,当我有整个列表时显示.

这是我的CursorAdapter构造函数,我为每个输入的字母调用setCursor(cursor):

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);
            }
        }
Run Code Online (Sandbox Code Playgroud)

rog*_*gcg 3

我通过在设置适配器后按顺序调用它来解决这个问题:

listView.setFastScrollEnabled(false);
listView.setFastScrollEnabled(true);
Run Code Online (Sandbox Code Playgroud)

这对我有用。