必须一次又一次地定义 Map 吗?
Must the Map be defined again and again?
我打算使用 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>
类型的 new 对象,因此在每次迭代中都会将一个新项目添加到您的 ArrayList
当你使用 2 方式时。
但是在第一种方式中,即 1 在每次迭代中没有创建新对象,因为它在 for 之前只创建了一次loop.And 因此你得不到你想要的。
listItems.add()
添加的是Map<String,String>
对象,Map的内容
将在每个循环中更改为方式 1。而 listItems 只需添加 listItems.length
次相同的 Map 对象
我打算使用 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>
类型的 new 对象,因此在每次迭代中都会将一个新项目添加到您的 ArrayList
当你使用 2 方式时。
但是在第一种方式中,即 1 在每次迭代中没有创建新对象,因为它在 for 之前只创建了一次loop.And 因此你得不到你想要的。
listItems.add()
添加的是Map<String,String>
对象,Map的内容
将在每个循环中更改为方式 1。而 listItems 只需添加 listItems.length
次相同的 Map 对象