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)だけを返すと、最初の(または2番目の)セクションでスクロールしていることがわかります。その結果、スクロールバーの位置が間違っています(ほとんど画面外になります)。追加されたコードは適切なセクションを返し、スクロール側は実際の場所を知ることができます。
ListActivityを使用しない理由はありますか?あなたが話すチュートリアルにリンクすることはできますか? –
部分文字列(0、0)? –
単語の最初の文字を取得する –