SectionIndexer 的最后一部分滚动得非常快

Last section of SectionIndexer scrolls really fast

这是我的问题 short video。列表的最后一部分滚动得非常快,正如您可以通过滚动条看到的那样。这是我的代码(相关部分):

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;
    }

有谁知道我该如何解决这个问题?

提前致谢。

您可以使用SetFriction method to control listview fast scroll speed. See an example at Android Listview slow down scroll speed

我通过在 GetSectionForPosition 中返回 0 而不是 1 来修复它。

getSectionForPosition 中返回常量可能会导致在列表中滑动时滚动条定位的错误行为。尽管您的问题似乎 已解决,但实际上并没有。 getSectionForPosition 方法的文档说:

Given a position within the adapter, returns the index of the corresponding section within the array of section objects.

因此,当您轻扫 列表时,您当前正在查看的部分最终会发生变化(例如,您将到达联系人中的 'B' 部分) .当您在列表中滑动时,此方法告诉滚动条必须将其定位在何处(这是 getPositionForSection 方法的对应方法,当您 scroll[=26= 时跳转到列表中的部分] 使用滚动条浏览列表)。

我提供了 getSectionForPosition 方法的示例实现