我已經看過很多教程,讓ListView在側面有字母(如聯繫人列表),但他們似乎都使用ListActivity類, /或來自數據庫的數據,而我只是使用ListView(無特殊活動)和數據的ArrayList。有誰知道我可以如何在我自己的ListView的聯繫人列表中實現字母滾動功能?如何在Android ListView上顯示字母字母
編輯再次
我跟着this tutorial,而且我認爲他將最終使其工作,但我仍然得到強制關閉。
class AlphabeticalAdapter extends ArrayAdapter<String> implements SectionIndexer
{
private HashMap<String, Integer> alphaIndexer;
private String[] sections;
public AlphabeticalAdapter(Context c, int resource, List<String> data)
{
super(c, resource, data);
for (int i = 0; i < data.size(); i++)
{
String s = data.get(i).substring(0, 1).toUpperCase();
alphaIndexer.put(s, i);
}
Set<String> sectionLetters = alphaIndexer.keySet();
ArrayList<String> sectionList = new ArrayList<String>(sectionLetters);
Collections.sort(sectionList);
sections = new String[sectionList.size()];
sectionList.toArray(sections);
}
public int getPositionForSection(int section)
{
return alphaIndexer.get(sections[section]);
}
public int getSectionForPosition(int position)
{
return 1;
}
public Object[] getSections()
{
return sections;
}
}
在LogCat中,它表示java.lang.RuntimeException: Unable to resume activity {(package of another app I made) android.app.SuperNotCalledExcpetion
。我認爲這很奇怪,因爲我並沒有在我正在使用的那個應用程序中引用其他應用程序。我試圖卸載其他應用程序,仍然強迫關閉,但我可以看到LogCat所說的內容,因爲它沒有更新。
最後編輯
這裏是工作的代碼。對不起,發佈了一些類似逾期9個月的內容。
class AlphabeticalAdapter extends ArrayAdapter<String> implements SectionIndexer
{
private HashMap<String, Integer> alphaIndexer;
private String[] sections;
public AlphabeticalAdapter(Context c, int resource, List<String> data)
{
super(c, resource, data);
alphaIndexer = new HashMap<String, Integer>();
for (int i = 0; i < data.size(); i++)
{
String s = data.get(i).substring(0, 1).toUpperCase();
if (!alphaIndexer.containsKey(s))
alphaIndexer.put(s, i);
}
Set<String> sectionLetters = alphaIndexer.keySet();
ArrayList<String> sectionList = new ArrayList<String>(sectionLetters);
Collections.sort(sectionList);
sections = new String[sectionList.size()];
for (int i = 0; i < sectionList.size(); i++)
sections[i] = sectionList.get(i);
}
public int getPositionForSection(int section)
{
return alphaIndexer.get(sections[section]);
}
public int getSectionForPosition(int position)
{
for (int i = sections.length - 1; i >= 0; i--) {
if (position >= alphaIndexer.get(sections[ i ])) {
return i;
}
}
return 0;
}
public Object[] getSections()
{
return sections;
}
}
編輯:如果你希望你的滾動條出現在正確的地方,而你正在滾動getSectionForPosition是很重要的。僅返回1(或0)表示您只是在第一個(或第二個)部分中滾動,這將導致滾動條位置錯誤(大多數情況下不在屏幕上)。添加的代碼返回適當的部分,以便Scroller可以知道它的實際位置。
是否有你不想使用ListActivity的原因?你能鏈接到你說的教程嗎? –
substring(0,0)? –
得到這個詞的第一個字母 –