我创建了一个自定义ListView
,并在java中填充了ListView
SimpleAdapter
。这是我的代码:
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);
现在我分别创建了两个String Arrays
歌曲和艺术家,并将它们放在HashMap
中,然后将HashMap
放入名为ArrayList
的{{1}}中。之后,我使用参数中的默认列表项id设置适配器。
我面临的问题是,当我运行应用程序时,列表视图只重复显示字符串数组的最后一项和子项。这是图片供参考。 My ListView
我想知道为什么会这样。我尝试将itemList
放在itemList.add(itemMap);
循环之外,但它仍然不起作用。如果有正确的解释,帮助真的会受到赞赏,因为我对此有点新鲜。谢谢!
答案 0 :(得分: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);
}
阐释:
Refer在这里。注意HashMap
是key
value
对,这意味着它将为密钥存储一些值。因此HashMap
不允许重复密钥。您已经在代码中添加了song
和artist
的值。因此,您无法再次为这些键添加值。但itemlist
在每次迭代时添加itemMap
。这就是列表重复相同记录的原因。要避免此问题,只需重新实例化itemMap
对象。
我希望这会对你有所帮助。
答案 1 :(得分:0)
在每次迭代时创建一个HashMap的新对象。