我正在尝试使用AlphabetIndexer实现快速滚动器,但是当光标更改时,它不会刷新索引检查。在我的CursorAdapter构造函数中,我调用setCursor(cursor),但是没有任何变化,并根据文档进行:



但是什么也没发生。我将其用于搜索过滤器,因此当我搜索联系人时,它会使用联系人更新列表,因此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);
            }
        }

最佳答案

我已通过在设置适配器后依次调用此命令来解决此问题:

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

那对我有用。

10-08 13:11