对于Hashmap到ArrayList的循环没有保持正确的值。怎么修?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对于Hashmap到ArrayList的循环没有保持正确的值。怎么修?相关的知识,希望对你有一定的参考价值。
我有以下代码,令人惊讶的是不起作用;
needsInfoView = (ListView) findViewById(R.id.needsInfo);
needsInfoList = new ArrayList<>();
HashMap<String, String> needsInfoHashMap = new HashMap<>();
for (int i = 0; i < 11; i++) {
needsInfoHashMap.put("TA", needsTitleArray[i]);
needsInfoHashMap.put("IA", needsInfoArray[i]);
Log.e("NIMH",needsInfoHashMap.toString());
//Here, I get the perfect output - TA's value, then IA's value
needsInfoList.add(needsInfoHashMap);
Log.e("NIL",needsInfoList.toString());
//This is a mess - TA, IA values for 12 entries are all the same, they are the LAST entries of needsTitleArray and needsInfoArray on each ArrayList item.
needsInfoAdapter = new SimpleAdapter(getBaseContext(), needsInfoList,
R.layout.needsinfocontent, new String[]{ "TA", "IA"},
new int[]{R.id.ta, R.id.ia});
needsInfoView.setVerticalScrollBarEnabled(true);
needsInfoView.setAdapter(needsInfoAdapter);
}
请参阅日志行下方的评论。这解释了我收到的输出。如何通过SimpleAdapter将ArrayList值传递给ListView中的两个文本字段?
谢谢
答案
对于
Hashmap
到ArrayList
的循环没有保持正确的值
因为你在HashMap
中添加了相同的实例needsInfoList
你需要在你的HashMap
列表中添加新的实例needsInfoList
,如下面的代码
你还需要将你的needsInfoAdapter
设置为循环外的needsInfoView
listview
,如下面的代码
试试这个
needsInfoList = new ArrayList<>();
needsInfoView = (ListView) findViewById(R.id.needsInfo);
for (int i = 0; i < 11; i++) {
HashMap<String, String> needsInfoHashMap = new HashMap<>();
needsInfoHashMap.put("TA", needsTitleArray[i]);
needsInfoHashMap.put("IA", needsInfoArray[i]);
needsInfoList.add(needsInfoHashMap);
}
needsInfoAdapter = new SimpleAdapter(getBaseContext(), needsInfoList,
R.layout.needsinfocontent, new String[]{"TA", "IA"},
new int[]{R.id.ta, R.id.ia});
needsInfoView.setVerticalScrollBarEnabled(true);
needsInfoView.setAdapter(needsInfoAdapter);
另一答案
您正在多次向HashMap
添加相同的List
实例,这意味着您在每次迭代时放入Map
的条目将替换上一次迭代所放置的条目。
您应该在每次迭代时创建一个新的HashMap
实例:
for (int i = 0; i < 11; i++) {
HashMap<String, String> needsInfoHashMap = new HashMap<>();
needsInfoHashMap.put("TA", needsTitleArray[i]);
needsInfoHashMap.put("IA", needsInfoArray[i]);
needsInfoList.add(needsInfoHashMap);
....
}
以上是关于对于Hashmap到ArrayList的循环没有保持正确的值。怎么修?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 HashMap 中提取 ArrayList 并在 Java 中循环遍历它?
hashMap与 hashTable , ArrayList与linkedList 的区别(详细)
Java如何比较ArrayList和Hashmap中的值[关闭]
为啥 ArrayList 以 1.5 的速度增长,而 Hashmap 却是 2?