我打算使用SimpleAdapter将数据从数据库加载到ListView,就像:
private void loadData() {
// TODO Auto-generated method stub
Cursor cursor = mHelper.getReadableDatabase().rawQuery(
"select * from dict", null);
int wordIndex = cursor.getColumnIndex("word");
int detailIndex = cursor.getColumnIndex("detail");
int flagIndex = cursor.getColumnIndex("flag");
**(1)**//Map<String,String>map = new HashMap<String,String>();
//map defined here, items are all the last record
for (cursor.moveToFirst();!cursor.isAfterLast();cursor.moveToNext()){
**(2)**Map<String,String>map = new HashMap<String,String>();
if(cursor.getString(wordIndex)==null) break;
// Log.d(tag,"word: "+cursor.getString(wordIndex));
map.put("word", cursor.getString(wordIndex));
// Log.d(tag,"detail: "+cursor.getString(detailIndex));
map.put("detail", cursor.getString(detailIndex));
// Log.d(tag,"flag: "+cursor.getString(flagIndex));
map.put("flag", cursor.getString(flagIndex));
listItems.add(map);
}
cursor.close();
}
listItems定义为 ArrayList<Map<String, String>> listItems;
当我将Map定义为1时,其中map在for循环之外,listItems保留最后一个的listItems.length记录,而map定义为2时,listItems将listItems.length记录保留为数据库。有人可以告诉我为什么吗?我会很感激您的回答!
第二种方法,即2,是正确的方法。
原因是在每次迭代中都会创建一个新的Map<String,String>
类型的对象,因此ArrayList
,当您使用方式2时,每次迭代都会向您的对象中添加一个新项目。
但是以第一种方式,即在每次迭代中都为1时,不会创建新对象,因为它仅在for循环之前完成一次。因此,您将无法获得想要的东西。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句