Я пытаюсь реализовать быстрый скроллер с AlphabetIndexer, но когда курсор меняется, он не обновляет индексную чашу. В моем конструкторе 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);
}
}