我正在尝试用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);
}
}
答案 0 :(得分:3)
我在设置适配器之后依次调用它来解决这个问题:
listView.setFastScrollEnabled(false);
listView.setFastScrollEnabled(true);
这对我有用。
答案 1 :(得分:0)
调用setContentView(R.layout.whatever)
,然后使用新的适配器/新数据项重新填充ListView。这将使用您的新项目重绘ListView,并且FastScroll Overlay将显示在正确的位置。