2

我正在使用部分来实现ListView,在该部分中,除了常规字母之外,我还显示自定义部分标题作为标题。为了让我SectionIndexer正确实现自定义,我希望了解这两种方法getSectionForPositiongetPositionForSection.

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

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

任何对此有所了解的人都可以对此发表答案。感谢您花时间解决问题。

更新:

我已经浏览了这个官方页面上的文档;我正在寻找有关自定义SectionIndex实现的详细见解

4

3 回答 3

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

希望这可以帮助你

于 2012-09-17T10:45:42.243 回答
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();
}

当然,您现在应该实现一个方法来填充适配器的数据列表。

于 2013-02-27T10:25:39.170 回答
0

该方法getPositionForSection(int section)返回列表中的起始索引section

而该方法getSectionForPosition(int position)返回您包含项目的部分的索引position

于 2012-09-17T10:42:56.483 回答