0

sectionList をログアウトすると、20 個の項目があります。何らかの理由で、最後の項目を除くすべての項目がセクション配列に入力されています。誰かがここで何が悪いのか見ることができますか?

更新: 問題のクラス全体を投稿しました。比較的短いです。Androidアプリからです。

public class ItemAdapter extends ArrayAdapter<ItemObject> implements
        SectionIndexer {

    private HashMap<String, Integer> alphaIndexer;
    private String[] sections;
    private LayoutInflater inflater;

    public ItemAdapter(Context context, ItemObject[] objects) {
        super(context, R.layout.item_row_layout, objects);

        inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        alphaIndexer = new HashMap<String, Integer>();
        int size = objects.length;

        for (int i = 0; i < size; i++) {

            ItemObject it = objects[i];
            String name = it.name;
            String s = name.substring(0, 1);
            s = s.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()];

        sections = sectionList.toArray(new String[sectionList.size()]);


    }
4

2 に答える 2

3
    for (int i = 0; i < sectionList.size(); i++) {
        sections[i] = sectionList.get(i);
    }

    for (int i = 0; i < sections.length - 1; i++) {
        sections[i] = sectionList.get(i);
    }

ここで配列を 2 回コピーするのはなぜですか? また、なぜ使用しないのIteratorですか?実際、実際に使用する必要あるのは、ArrayList.toArrayに変換することです。String[]

sections = sectionList.toArray(new String[sectionList.size()]);

さらに、単に実行するだけで、TreeMapa ではなく aを使用してキーをソートできます...HashMapTreeMap.keySet

セットの反復子はキーを昇順で返します。

于 2012-08-28T01:53:44.023 に答える
1

その背後にある理由は、 for ループの条件だと思いますi < sections.length - 1;。おそらくsections[i]、for ループでのみログを記録しています。

于 2012-08-28T01:57:42.057 に答える