【问题标题】:Must the Map be defined again and again?必须一次又一次地定义地图吗?
【发布时间】:2015-07-30 02:23:51
【问题描述】:

我打算用 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&lt;Map&lt;String, String&gt;&gt; listItems;

当我将 Map 定义为 1 时,其中 map 在 for 循环之外,listItems 保留最后一个的 listItems.length 记录,而 map 定义为 2,listItems 保留 listItems.length 记录作为数据库。 有人能告诉我为什么吗?我会很感激你的回答!

【问题讨论】:

    标签: android simpleadapter


    【解决方案1】:

    第二种方式的正确方法,即 2

    原因是在每次迭代中都会创建一个 Map&lt;String,String&gt; 类型的 new 对象,因此当您使用方式 2。

    但在第一种方式中,即 1 在每次迭代中都不会创建新对象,因为它在 for 循环之前只创建了一次。因此你不需要得到你想要的。

    【讨论】:

      【解决方案2】:

      listItems.add() add 是一个Map&lt;String,String&gt; 对象,Map 的内容 将在每个循环中更改为方式 1。而 listItems 只需添加 listItems.length 次相同的 Map 对象

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-22
        • 2015-04-15
        • 1970-01-01
        • 2021-11-14
        • 2018-08-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多