Последний раздел SectionIndexer прокручивается очень быстро

Вот короткое видео моей проблемы. Последний раздел списка очень быстро прокручивается, как вы можете видеть по полосе прокрутки. Вот мой код (соответствующие части):

public TotemAdapter (Activity activity, List<Totem> list) { 
        _activity = activity;
        totemList = list;
        showDelete = false;

        var items = list.ToArray ();

        alphaIndex = new Dictionary<string, int>();
        for (int i = 0; i < items.Length; i++) {
            var key = items[i].title[0].ToString();
            if (!alphaIndex.ContainsKey(key)) 
                alphaIndex.Add(key, i);
        }
        sections = new string[alphaIndex.Keys.Count];
        alphaIndex.Keys.CopyTo(sections, 0);
        sectionsObjects = new Java.Lang.Object[sections.Length];
        for (int i = 0; i < sections.Length; i++) {
            sectionsObjects[i] = new Java.Lang.String(sections[i]);
        }
    }

public int GetPositionForSection (int section) {
        return alphaIndex[sections[section]];
    }

    public int GetSectionForPosition(int position) {
        return 1;
    }

    public Java.Lang.Object[] GetSections () {
        return sectionsObjects;
    }

Кто-нибудь знает, как я могу это исправить?

Заранее спасибо.

3 ответа

Решение

Я исправил это, вернув 0 вместо 1 в GetSectionForPosition,

Вы можете использовать метод SetFriction для управления быстрой прокруткой списка. Посмотрите пример на Android Listview с замедленной скоростью прокрутки

Возвращая константу в getSectionForPosition может привести к неправильному поведению положения полосы прокрутки при пролистывании списка. Хотя ваша проблема, кажется, исправлена, на самом деле это не так. Документация для getSectionForPosition Метод говорит:

Учитывая позицию в адаптере, возвращает индекс соответствующего раздела в массиве объектов раздела.

Поэтому, когда вы проводите по списку, просматриваемый в настоящий момент раздел в конечном итоге изменится (например, вы попали в раздел "B" в ваших контактах). Этот метод сообщает полосе прокрутки, где она должна располагаться, когда вы проводите по списку (который является аналогом getPositionForSectionметод, который переходит к разделу в списке, когда выпрокручиваете свой список с помощью полосы прокрутки).

Я предоставил пример реализацииgetSectionForPositionметод здесь.

Другие вопросы по тегам