0

这是我的问题的简短视频。从滚动条可以看出,列表的最后一部分滚动得非常快。这是我的代码(相关部分):

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

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

提前致谢。

4

3 回答 3

1

我通过返回 0 而不是 1 in 来修复它GetSectionForPosition

于 2016-04-19T10:53:57.633 回答
0

您可以使用SetFriction 方法来控制列表视图的快速滚动速度。请参阅Android Listview 减慢滚动速度的示例

于 2016-04-19T10:52:42.293 回答
0

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

给定适配器内的一个位置,返回相应部分在部分对象数组中的索引。

因此,当您在列表中滑动时,您当前正在查看的部分最终会发生变化(例如,您将到达联系人中的“B”部分)。此方法告诉滚动条在您滑动列表时它必须将自身定位在哪里(这是当您使用滚动条滚动列表时跳转到列表中的部分的方法的对应方法getPositionForSection)。

我在这里getSectionForPosition提供了该方法的示例实现。

于 2016-11-11T13:55:00.200 回答