我正在尝试使用 AlphabetIndexer 实现快速滚动,但是当光标更改时,它不会刷新索引缓存。在我的 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);
}
}