我實現了ListView
和SectionIndexer
。它正在工作99%的時間,但我發現一種情況下,它是錯誤的。LIstView SectionIndexer給出錯誤ArrayIndexOutOfBoundsException
錯誤是:
java.lang.ArrayIndexOutOfBoundsException: length=1; index=1
而且是在該代碼發生的事情:
@Override
public int getPositionForSection(int section) {
return indexer.get(sections[section]);
}
調試我發現,在上述方法中,對於輸入I處提供的此端部文字,被稱爲兩次。第二次,section
假設值1
它給出錯誤。
我的適配器以這種方式實現:
public class SearchAdapter extends ArrayAdapter<String[]> implements SectionIndexer {
private final Context context;
private ArrayList<String[]> foodData;
private HashMap<String, Integer> indexer;
private String[] sections;
public SearchAdapter(Context context, ArrayList<String[]> allFoodData) {
super(context, R.layout.rowlist, allFoodData);
this.context = context;
this.foodData = allFoodData;
indexer = new HashMap<String, Integer>();
int size = foodData.size();
for (int x = 0; x < size; x++) {
String[] s = foodData.get(x);
System.out.println("x = " + x + ": foodata[0]=" + s[0] + ": foodata[1]=" + s[1] + ": foodata[2]=" + s[2] + ": foodata[3]=" + s[3]);
String ch = s[1].substring(0,1);
ch = ch.toUpperCase();
if (!indexer.containsKey(ch))
indexer.put(ch, x);
}
Set<String> sectionLetters = indexer.keySet();
// create a list from the set to sort
ArrayList<String> sectionList = new ArrayList<String>(sectionLetters);
Collections.sort(sectionList);
sections = new String[sectionList.size()];
sections = sectionList.toArray(sections);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
\\\\\\\ stuff
}
// ##################### LISTVIEW INDEX #####################
@Override
public Object[] getSections() {
return sections;
}
@Override
public int getPositionForSection(int section) {
return indexer.get(sections[section]);
}
@Override
public int getSectionForPosition(int position) {
return 0;
}
}
輸入是:
x = 0: foodata[0]=81: foodata[1]=Iogurte Açucarado batido gordo com cereais e fruta: foodata[2]=PT INSA: foodata[3]=1
x = 1: foodata[0]=80: foodata[1]=Iogurte Açucarado batido gordo com fruta: foodata[2]=PT INSA: foodata[3]=1
x = 2: foodata[0]=70: foodata[1]=Iogurte Açucarado batido meio gordo: foodata[2]=PT INSA: foodata[3]=1
x = 3: foodata[0]=75: foodata[1]=Iogurte Açucarado batido meio gordo com fruta: foodata[2]=PT INSA: foodata[3]=1
x = 4: foodata[0]=69: foodata[1]=Iogurte Açucarado com edulcorante de síntese, batido magro com cereais: foodata[2]=PT INSA: foodata[3]=1
x = 5: foodata[0]=68: foodata[1]=Iogurte Açucarado com edulcorante de síntese, sólido magro: foodata[2]=PT INSA: foodata[3]=1
x = 6: foodata[0]=71: foodata[1]=Iogurte Açucarado líquido meio gordo: foodata[2]=PT INSA: foodata[3]=1
x = 7: foodata[0]=82: foodata[1]=Iogurte Aromatizado açucarado batido gordo: foodata[2]=PT INSA: foodata[3]=1
x = 8: foodata[0]=72: foodata[1]=Iogurte Aromatizado açucarado batido meio gordo: foodata[2]=PT INSA: foodata[3]=1
x = 9: foodata[0]=77: foodata[1]=Iogurte Aromatizado açucarado líquido magro: foodata[2]=PT INSA: foodata[3]=1
x = 10: foodata[0]=73: foodata[1]=Iogurte Aromatizado açucarado líquido meio gordo: foodata[2]=PT INSA: foodata[3]=1
x = 11: foodata[0]=78: foodata[1]=Iogurte Aromatizado açucarado sólido magro: foodata[2]=PT INSA: foodata[3]=1
x = 12: foodata[0]=74: foodata[1]=Iogurte Aromatizado açucarado sólido meio gordo: foodata[2]=PT INSA: foodata[3]=1
x = 13: foodata[0]=79: foodata[1]=Iogurte Natural sólido magro: foodata[2]=PT INSA: foodata[3]=1
x = 14: foodata[0]=76: foodata[1]=Iogurte Natural sólido meio gordo: foodata[2]=PT INSA: foodata[3]=1
正如你可以看到,指數只是一個字母,在這種情況下"I"
。我已經嘗試過只產生一個字母索引的其他輸入,這是唯一一個給我錯誤的情況。
任何想法爲什麼?
有同樣的問題,沒有人有答案,這??? – astuter