package com.demo.sectionlistview;
import java.util.Arrays;
import android.widget.SectionIndexer;
public class MySectionIndexer implements SectionIndexer{
private final String[] mSections;//
private final int[] mPositions;
private final int mCount;
/**
* @param sections
* @param counts
*/
public MySectionIndexer(String[] sections, int[] counts) {
if (sections == null || counts == null) {
throw new NullPointerException();
}
if (sections.length != counts.length) {
throw new IllegalArgumentException(
"The sections and counts arrays must have the same length");
}
this.mSections = sections;
mPositions = new int[counts.length];
int position = 0;
for (int i = 0; i < counts.length; i++) {
if(mSections[i] == null) {
mSections[i] = "";
} else {
mSections[i] = mSections[i].trim();
}
mPositions[i] = position;
position += counts[i];
}
mCount = position;
}
@Override
public Object[] getSections() {
// TODO Auto-generated method stub
return mSections;
}
@Override
public int getPositionForSection(int section) {
//change by lcq 2012-10-12 section >mSections.length��Ϊ>=
if (section < 0 || section >= mSections.length) {
return -1;
}
System.out.println("lcq:section:"+section);
return mPositions[section];
}
@Override
public int getSectionForPosition(int position) {
if (position < 0 || position >= mCount) {
return -1;
}
//ע����������ķ���ֵ��������index<0ʱ������-index-2��ԭ��
//����Arrays.binarySearch�������������������У��շ������������е�������������ڣ��շ��ص�һ��������������ĸ���-1
//���ûŪ���ף����Լ���鿴api
int index = Arrays.binarySearch(mPositions, position);
return index >= 0 ? index : -index - 2; //��indexС��0ʱ������-index-2��
}
}