2

私はカスタムを作成しListView、JavaでそれListViewSimpleAdapter. これが私のコードです:

setContentView(R.layout.activity_my);
list = (ListView) findViewById(R.id.lvList);

itemList = new ArrayList<HashMap<String, String>>();
itemMap = new HashMap<String, String>();

for (int i = 0; i < songs.length; i++) {
    itemMap.put("song", songs[i]);
    itemMap.put("artist", artists[i]);
    System.out.println(songs[i] + "     " + artists[i]);
    itemList.add(itemMap);
}

SimpleAdapter adapter = new SimpleAdapter(this, itemList,
            android.R.layout.simple_list_item_2, new String[] {"song",
                    "artist"}, new int[] { android.R.id.text1,
                    android.R.id.text2 });
list.setAdapter(adapter);

ここで、2 つのString ArraysSong と Artist をそれぞれ作成し、それらを に配置してから、と呼ばれるHashMapに配置しHashMapました。その後、パラメーターにデフォルトのリスト項目 ID を使用してアダプターをセットアップしました。ArrayListitemList

私が直面している問題は、アプリケーションを実行すると、リスト ビューに文字列配列の最後のアイテムとサブアイテムのみが繰り返し表示されることです。参考までに画像はこちら。 マイリストビュー

なぜこれが起こっているのか知りたいです。itemList.add(itemMap);ループの外側に配置しようとしましfor()たが、それでも機能しませんでした。私はこれにちょっと慣れていないので、適切な説明で助けていただければ幸いです。ありがとう!

4

2 に答える 2

3

itemMapこれは、反復ごとにオブジェクトを再作成することで実現できます。以下の方法を試してください。

itemMap = new HashMap<String, String>();

for (int i = 0; i < songs.length; i++) {
    itemMap.put("song", songs[i]);
    itemMap.put("artist", artists[i]);
    System.out.println(songs[i] + "     " + artists[i]);
    itemList.add(itemMap);
}

これをに変更

for (int i = 0; i < songs.length; i++) {
    itemMap = new HashMap<String, String>();
    itemMap.put("song", songs[i]);
    itemMap.put("artist", artists[i]);
    System.out.println(songs[i] + "     " + artists[i]);
    itemList.add(itemMap);
}

説明:

ここを参照してください。NoteHashMapkey valueキーの値を格納することを意味するペアです。したがってHashMap、重複キーは許可されません。songコードからすでにとの値を追加していますartist。したがって、これらのキーの値を再度追加することはできません。しかし、繰り返しごとにitemlist追加します。itemMapそれが、リストが同じレコードを繰り返す理由です。この問題を回避するには、itemMapオブジェクトを再インスタンス化します。

これがお役に立てば幸いです。

于 2013-07-18T04:39:34.847 に答える