gpt4 book ai didi

android - section indexer get section for position 返回 0

转载 作者:行者123 更新时间:2023-11-29 17:43:20 26 4
gpt4 key购买 nike

在我的项目中,我有扩展 ArrayAdapter<String> 的类并实现 SectionIndexer .实现方法时getPositionForSectiongetSectionForPosition我发现了一些奇怪的行为。

为什么节索引器在 getSectionForPosition 时正常工作返回 0?

public int getSectionForPosition(int position) {
return 0;
}

这个实现被用在很多教程中,例如:

http://androidopentutorials.com/android-listview-fastscroll/

http://www.survivingwithandroid.com/2012/12/android-listview-sectionindexer-fastscroll.html

文档说

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

所以如果我的列表有 5 个以字母“A”开头的项目和一些以字母“B”开头的项目,那么 getSectionForPosition(5) 应该返回 1。

最佳答案

虽然 sectionIndexer 的基本功能(拉动滚动条拇指时滚动部分索引)不受影响,但在方法 getSectionForPosition 中返回常量会导致在列表中滑动时滚动条定位的错误行为(例如,滚动条在 y 轴上移出窗口)。

显然,这种不当行为仅在列表或单个部分超过特定长度时才会发生,因此对于较短的列表,索引器似乎可以正常工作(但实际上并非如此)。在上述方法中多次返回常量时,我​​在较大的列表中遇到了这种不当行为,并通过以正确的方式实现 getSectionForPosition 来修复它。


但是,由于其他人可能会对它感兴趣,所以我可以提供该方法的示例实现。设 azIndexer 是一个 HashMap,其中包含我的索引的正确 section -> position 映射,listItems 是排列的项目由适配器。以下构建了一个存储在 positionIndexer 中的 position -> sectionIndex 映射。

List<Integer> values = new ArrayList();
for (int i : azIndexer.values()) {
values.add(i);
}
values.add(listItems.size()-1);
Collections.sort(values);

int k = 0;
int z = 0;
for(int i = 0; i < values.size()-1; i++) {
int temp = values.get(i+1);
do {
positionIndexer.put(k, z);
k++;
} while(k < temp);
z++;
}

然后将在 getSectionForPosition 方法中使用:

@Override
public int getSectionForPosition(int position) {
return positionIndexer.get(position);
}

关于android - section indexer get section for position 返回 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27819394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com