我正在实现ListView
,其中我将自定义部分标题与传统字母表分开作为标题。为了让我正确实现自定义SectionIndexer
,我希望了解getSectionForPosition
和getPositionForSection
两种方法之间的区别。
我了解(不确定这是否正确)getSectionForPosition
返回我们想要在部分标题中显示的字母表。
我不明白另一种方法。另外,它们在任何意义上是否相似(如果有的话)以及它们在哪些方面有所不同(如果它们相似,我认为它们:)
)任何对此有所了解的人都可以对此发表答案。感谢您花时间回答这个问题。
更新:
我已经浏览了此官方页面上的文档;我正在寻找有关自定义SectionIndex
实施的一些详细见解
>getPositionForSection(section)
返回索引列处的游标数据以节开头的第一个位置。
例如,如果 B 节的索引为 1,并且游标的索引列具有以下数据
Position Data getSectionForPosition(position)
_________ __________ ______________________________
0 Abhfdf 0
1 Achahtkh 0
2 Ahtjlarej 0
3 Bchatkd 1
4 Bjklhdsfoi 1
5 Bzhafdlsfk 1
6 Cj fadsfkj 2
则getPositionForSection(1)
返回 3
还getPositionForSection(2)
返回 6
希望这对你有帮助
这是我创建的示例实现。也许它稍微澄清了SectionIndexer。
为了保存数据,可以使用私有内部类:
private class Item {
public int sectionNumber;
public Long id;
public String name;
}
private class Section {
public int startPosition;
public String header;
@Override
public String toString(){
return header;
}
}
为您的项目使用一个列表,为您的部分使用一个列表:
private List<Item> items = new ArrayList<Item>();
private List<Section> sections = new ArrayList<Section>();
SectionIndexer 的列表适配器中的实现现在可能如下所示:
@Override
public int getPositionForSection(int sectionNumber) {
return sections.get(sectionNumber).startPosition;
}
@Override
public int getSectionForPosition(int itemPosition) {
return items.get(itemPosition).sectionNumber;
}
@Override
public Object[] getSections() {
return sections.toArray();
}
当然,您现在应该实现一种方法来填充适配器的数据列表。
该方法getPositionForSection(int section)
返回列表中section
的起始索引
而该方法getSectionForPosition(int position)
返回包含项目position