以爲我會在這裏張貼,希望它不是太晚。
注意:這不是使用AlphabetIndexer,我不認爲使用三個集合來管理列表是一個好主意,雖然它很簡單,並解釋了這個概念。
下面是如何使用回調一個基本的例子:
public LinkedHashMap<Integer,String> sectionList = new LinkedHashMap<Integer,String>();
public HashMap<Integer,Integer> sectionPositions = new HashMap<Integer, Integer>();
public HashMap<Integer,Integer> positionsForSection = new HashMap<Integer, Integer>();
當你有你「位置」陣列(預購),這將創建三個包含HashMap跟蹤的東西,很簡單的實現,很容易閱讀:
if(locations != null && locations.size() > 0) {
//Iterate through the contacts, take the first letter, uppercase it, and use that as a key to reference the alphabetised list constructed above.
for(int i = 0; i < locations.size(); i++) {
String startchar =locations.get(i).getStartCharacterForAlphabet();
if(startchar != null) {
if(sectionList.containsValue(startchar) == false) {
sectionList.put(Integer.valueOf(i),startchar);
positionsForSection.put(Integer.valueOf(sectionList.size() - 1), Integer.valueOf(i));
}
}
sectionPositions.put(Integer.valueOf(i), sectionList.size() - 1);
}
}
這裏是三個回調:
@Override
public int getPositionForSection(int section) {
return positionsForSection.get(Integer.valueOf(section)).intValue();
}
@Override
public MyLocation getItem(int position) {
if(locations.size() > position) {
return locations.get(position);
}
return null;
}
@Override
public int getSectionForPosition(int position) {
return sectionPositions.get(Integer.valueOf(position)).intValue();
}
希望它有幫助!
我發現這個bug類似於http://code.google.com/p/android/issues/detail?id=33293原因是getSectionForPosition&getPositionForSection方法的錯誤實現,但我根本不明白如何執行權利 – Lingviston