getPositionForSection 和 getSectionForPosition 之间的区别



我正在实现ListView,其中我将自定义部分标题与传统字母表分开作为标题。为了让我正确实现自定义SectionIndexer,我希望了解getSectionForPositiongetPositionForSection两种方法之间的区别。

我了解(不确定这是否正确)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

最新更新