2

ここで素晴らしいコーディング例に従っています: This SO question . これは、配列アダプターへの SectionIndexer インターフェイスの実装に関するものです。

ただし、ArrayAdapter が ArrayList< String > ではなく ArrayList< MyObject > を渡している場合、どのように同じことを行うのでしょうか?

たとえば、これは私のコードが彼のコードと異なる場所です。彼は持っています:

class AlphabeticalAdapter extends ArrayAdapter<String> implements SectionIndexer {
private HashMap<String, Integer> alphaIndexer;
private String[] sections;

public AlphabeticalAdapter(Context c, int resource, List<String> data) {

    alphaIndexer = new HashMap<String, Integer>();
    for (int i = 0; i < data.size(); i++) {
        String s = data.get(i).substring(0, 1).toUpperCase();
        alphaIndexer.put(s, i);
    }

    // other stuff

 }

そのforループを自分の状況に適応させるのに問題があります。私は彼のようにサイズを測ることができません。彼が上記を持っているところから、私のアダプターが始まります。

 public class CustomAdapter extends ArrayAdapter<Items> implements
    SectionIndexer {

     public ItemAdapter(Context context, Items[] objects) {

彼が 1 つの ArrayList を渡しているところに、私は 3 つ渡さなければなりませんが、それを実現するには、カスタム オブジェクト クラスでラップする必要がありました。並べ替えたい ArrayLists の 1 つは、"name" というクラスの 3 つのフィールドの 1 つです。明らかに文字列です。

その名前フィールドに基づいて、SectionIndex でアルファベット順にスクロールしたいと思います。このシナリオで動作するように、他の質問のコード例を変更するにはどうすればよいですか?

彼が「data.size()」を持っているところに、「name.size()」のようなものが必要だと思いますか?

4

1 に答える 1

2

彼が 1 つの ArrayList を渡しているところに、私は 3 つ渡さなければなりませんが、それを実現するには、カスタム オブジェクト クラスでラップする必要がありました。並べ替えたい ArrayLists の 1 つは、"name" というクラスの 3 つのフィールドの 1 つです。

three がなく、3から構築されArrayListsArrayListof カスタム オブジェクトがありますArrayLists(したがって、サイズはListアダプターに渡す のサイズです)。この観点から、コードの唯一の変更点は、そのカスタム オブジェクトの名前Itemsを使用してセクションを作成することです。

for (int i = 0; i < data.size(); i++) {
    String s = data.get(i).name.substring(0, 1).toUpperCase();
    if (!alphaIndexer.containsKey(s)) {
        alphaIndexer.put(s, i);
    }
}
// ...

その他の変更はありません。また、次を使用してアダプターに渡すListのをソートする必要がある場合があります。Items

Collections.sort(mData);

ItemsクラスがComparable<Items>インターフェースを実装する必要がある場所:

    class Items implements Comparable<Items> {
        String name;
        // ... rest of the code

        @Override
        public int compareTo(Items another) {   
            // I assume that you want to sort the data after the name field of the Items class
            return name.compareToIgnoreCase(another.name);
        }

    }
于 2012-07-25T12:47:55.597 に答える