如何在Android中将ArrayList添加到HashMap后清除ArrayList?

时间:2014-08-23 14:02:08

标签: android sqlite arraylist hashmap expandablelistview

我正在做一个小的Android应用程序。我有可扩展列表视图,我正在尝试从 SQLite填充数据。因此我使用 HashMap 来存储parent(String)和{ {1}}。

例如,我在父级(1,2,3,4)中有四个整数,我得到这个并存储在ListArray中。现在我需要为该特定父级获取子(ListArray)。父1包含(aa,bb),父2包含(cc)..等,现在看到这段代码

child(ArrayList)

我想在将其添加到儿童后清除页脚,然后才能获得正确的可扩展列表视图。如果我删除/评论此try { header = new ArrayList<String>(); footer = new ArrayList<String>(); child= new HashMap<String, List<String>>(); String date = null; int count=0, countchild=0; Cursor c = db.rawQuery("SELECT Date FROM Table", null); if (c.moveToFirst()) { do { date=c.getString(c.getColumnIndex("Date")); header.add(date); count=count+1; } while (c.moveToNext()); } for (int i = 0; i < count; i++) { String temp=header.get(i); Cursor cc=db.rawQuery("SELECT Id FROM Table WHERE Date ='"+ temp +"' ", null); if(cc.moveToFirst()) { do { countchild=countchild+1; String id=cc.getString(cc.getColumnIndex("Id")); //footer.clear(); // it clear all data's on child footer.add(id); Log.d("Footer date count", "" + countchild); child.put(temp, footer); } while (cc.moveToNext()); //footer.clear(); // it clear all data's on child } footer.clear(); // it clear all data's on child } } 行,则所有孩子都会被添加到所有父母。 例如,父母1包含(aa,bb,cc等),父母2包含(aa,bb,cc等)。如果我离开这个footer.clear()行,那么所有孩子都被清除并且只显示这样的父母,例如父母1(),父母2()...等等

如何在将其添加到 HashMap 之后清除此footer.clear()?或者告诉我一些修改此代码的建议。

谢谢。斯里哈里

2 个答案:

答案 0 :(得分:2)

put ArrayList HashMap后,HashMap实际上会保存对数组的引用,而不是副本。

这就是为什么你必须为每个组使用不同的数组:

for (int i = 0; i < count; i++)
{
    List<String> children = new ArrayList<String>();
    String temp = header.get(i);
    Cursor cc = db.rawQuery("SELECT Id FROM Table WHERE Date ='"+ temp +"' ", null);
    if(cc.moveToFirst())
    {
        countChild += cc.getCount();
        Log.d("Footer date count", "" + countchild);
        do
        {
            String id = cc.getString(cc.getColumnIndex("Id"));
            children.add(id);
            child.put(temp, children);
        }
        while (cc.moveToNext());
    }
}

正如您所看到的那样,为每个组创建了一个新的children ArrayList,并且它永远不会clear,因为这样也会清除HashMap中的值。

此外,我已经让我自己修复了一些其他问题,例如使用Cursor的{​​{1}}方法来获取计数而不是循环。此外,我没有使用getCount数组,因为它在您显示的代码中是不必要的。

最后,请为变量使用可理解且有意义的名称,因为它可以帮助您以及阅读代码的其他人。

答案 1 :(得分:1)

记住Java是OO所以如果你清除一个对象的实例,在这种情况下是一个ArrayList,引用它的每个其他对象都将获得该新值。

我建议您每次需要填充新的可扩展列表视图组时创建页脚变量的新实例,这样您创建的每个页脚列表实例都将与列表中的一个组“关联”。

希望这会有所帮助。 :)