SectionIndexer は、ロードされたデータを整理しません。理想的には、クエリまたはそれをサポートするコレクションを使用して、事前にそれを行っておく必要があります。SectionIndexer は単に、adapterView がサポートされているセクションのリストを照会する方法を許可し、セクションの開始場所、終了場所、セクションの位置を指定します。したがって、データが既にソートされていると仮定します。
次の実装で SectionIndexer を作成できます
@Override
public Object[] getSections() {
return new CharSequence[] {"Fruit", "Vegetable", "Other"};
}
@Override
public int getSectionForPosition(int position) {
String text = getItem(position);
if (text.contains("Fruit") {
return 0;
} else if (text.contains("Vegetable") {
return 1;
} else {
return 2;
}
}
@Override
public int getPositionForSection(int section) {
String sectionName = (String) getSections()[section];
for (int i=0,length=getCount(); i < length; i++) {
if (((String)getItem(i)).contains(sectionName)) {
return i;
}
}
return getCount();
}
参考までに、これは非常に遅いため、これらのメソッドによって要求された情報の多くをキャッシュおよびプリフェッチするデータをロードするたびに、インデックス構造を作成することをお勧めします。