我正面临着一些已知的可解决问题,但在这里被击中。在我的代码中,值在第一个for循环执行时存储在ArrayList中。但是,在第二个循环中,值会被ArrayList中的最终值覆盖。最后,最后输入的值将单独存储列表大小的次数。
lstall = (ListView)findViewById(R.id.lvall);
sampleArrayList = new ArrayList<HashMap<String, String>>();
ListAdapter sampleListAdapter;
dh = new DBHelper(this);
HashMap<String, String> sampleObjectMap;
List<String> lvall = dh.selectAll();
sampleObjectMap= new HashMap<String, String>();
for(int i=0;i<lvall.size();i++)
{
for (@SuppressWarnings("unused") String sampleObj : lvall)
{
sampleObjectMap.put("title", dh.val1(i));
sampleObjectMap.put("person", dh.pers(i));
sampleObjectMap.put("priorty", setpriority(String.valueOf(dh.prioirty(i))));
sampleObjectMap.put("dat", getDate(Long.valueOf(dh.time(i)),"dd/MM/yyyy"));
}
sampleArrayList.add(sampleObjectMap);
}
我需要将所有值存储在一个arraylist中并显示在列表视图中。任何帮助都非常感谢,并提前感谢。
答案 0 :(得分:3)
您正在创建一个HashMap<String, String>
并反复覆盖其中的条目。
事实上,你正在做那个两次因为你有一个嵌套的for循环没有明显的原因。我相信你想要:
for (int i = 0; i < lvall.size(); i++)
{
HashMap<String, String> sampleObjectMap = new HashMap<String, String>();
sampleObjectMap.put("title", dh.val1(i));
sampleObjectMap.put("person", dh.pers(i));
sampleObjectMap.put("priorty", setpriority(String.valueOf(dh.prioirty(i))));
sampleObjectMap.put("dat", getDate(Long.valueOf(dh.time(i)),"dd/MM/yyyy"));
sampleArrayList.add(sampleObjectMap);
}
使用列表的大小似乎很奇怪,但实际上并没有使用列表中的值...您可能要考虑重构代码......
答案 1 :(得分:1)
尝试一下:
for(int i=0;i<lvall.size();i++)
{
sampleObjectMap= new HashMap<String, String>();
sampleObjectMap.put("title", dh.val1(i));
sampleObjectMap.put("person", dh.pers(i));
sampleObjectMap.put("priorty", setpriority(String.valueOf(dh.prioirty(i))));
sampleObjectMap.put("dat", getDate(Long.valueOf(dh.time(i)),"dd/MM/yyyy"));
sampleArrayList.add(sampleObjectMap);
}
答案 2 :(得分:1)
列表中的所有元素都具有相同Map
实例的引用,并且每次迭代都会覆盖相同的Map
条目。
for(int i=0;i<lvall.size();i++) {
// move it inside the loop
sampleObjectMap= new HashMap<String, String>();
但我认为你不需要Map
。只需创建一个包含所有必填字段作为成员变量的类。
答案 3 :(得分:0)
我没有测试过,但尝试创建新地图
sampleObjectMap = new HashMap<String, String>();
在你的内循环中,在你做之前。测试一下。稍后尝试使用1个地图对象,并在mapArrayList中记录地图后调用clear()。