Я пытаюсь реализовать быструю прокрутку с помощью AlphabetIndexer, но когда курсор изменяется, это не обновляет индексный chache. В своем конструкторе CursorAdapter я вызываю setCursor (cursor)
, но ничего не меняется, и согласно документации:
Ваш адаптер отвечает за обновление курсора путем вызова setCursor (Cursor), если курсор изменяется. getPositionForSection (число) выполняет двоичный поиск начального индекса данного раздел (алфавит).
Но ничего не происходит. Я использую это для фильтра поиска, поэтому, когда я ищу контакты, он обновляет список контактами, поэтому AlphabetIndexer должен работать для обновления индекса новых элементов в списке.
Пример: весь мой список начинается с контакты, которые начинаются с буквы «А» и заканчиваются контактами, которые начинаются с буквы «Е». Таким образом, AlphabetIndexer будет иметь эти индексы в своем кэше.
Но давайте попробуем найти контакты с помощью 'C', и скажем, у меня есть 250 контактов, которые начинаются с 'C'. Итак, мне нужно быстро просмотреть эти контакты, и должен отображаться индекс 'C', но вместо только 'C' он показывает все индексы, которые были показаны, когда у меня был весь список.
Вот мой конструктор CursorAdapter где я вызываю setCursor (курсор) для каждой буквы, которую я набираю:
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);
}
}