我正在实现ListView
部分,其中我将自定义部分标题与传统字母表一起显示为标题。为了让我正确实现自定义SectionIndexer
,我希望了解两种方法getSectionForPosition
和getPositionForSection
之间的区别。
我理解(不确定这是否正确)getSectionForPosition
返回我们想要在节标题中显示的字母。
我不明白其他方法。此外,它们在任何意义上是否相似(如果有的话)以及它们的不同之处(如果它们存在,我认为它们会这样做:))
任何了解此事的人都可以对此发表回答。感谢您回答问题的时间。
更新
我已经阅读了official page的文档;我正在寻找有关自定义SectionIndex
实施
答案 0 :(得分:5)
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
希望这有助于你
答案 1 :(得分:1)
这是我创建的示例实现。也许它有点澄清了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();
}
当然,您现在应该实现一个方法来填充适配器的数据列表。
答案 2 :(得分:0)
方法getPositionForSection(int section)
返回section
虽然方法getSectionForPosition(int position)
会返回包含position