getPositionForSection和getSectionForPosition之间的区别

时间:2012-09-17 10:35:40

标签: android listview sectionheader

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

我理解(不确定这是否正确)getSectionForPosition返回我们想要在节标题中显示的字母。

我不明白其他方法。此外,它们在任何意义上是否相似(如果有的话)以及它们的不同之处(如果它们存在,我认为它们会这样做:))

任何了解此事的人都可以对此发表回答。感谢您回答问题的时间。

更新

我已经阅读了official page的文档;我正在寻找有关自定义SectionIndex实施

的详细见解

3 个答案:

答案 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

项目的部分索引