我一直在尝试将近一天来解决这个问题,但我无法弄清楚什么是错的。使用SQLite填充ExpandableListAdapter
我得到这个代码
private void someFunction() {
listDataHeader = new ArrayList<String>();
listDataChild = new HashMap<String, List<String>>();
List<String> tempNomoi = new ArrayList<String>();
List<GeneralInfo> diamerismata = db.getAllDiamerismata();
List<GeneralInfo> nomoi = new ArrayList<GeneralInfo>();
for (GeneralInfo a : diamerismata) {
listDataHeader.add(a.getDiamerisma());
nomoi = db.GetNomousDiamerismatos(a.getDiamerisma());
tempNomoi.clear();
for (GeneralInfo b : nomoi) {
tempNomoi.add(b.getNomo());
}
listDataChild.put(a.getDiamerisma(), tempNomoi);
System.out.println(listDataChild);
}
}
我得到这个输出
I/System.out(5750): SELECT nomos FROM info WHERE diamerisma = 'diamerisma1'
I/System.out(5750): {diamerisma1=[nomos1, nomos3, nomos5]}
I/System.out(5750): SELECT nomos FROM info WHERE diamerisma = 'diamerisma2'
I/System.out(5750): {diamerisma2=[nomos2, nomos4], diamerisma1=[nomos2, nomos4]}
I/System.out(5750): SELECT nomos FROM info WHERE diamerisma = 'diamerisma3'
I/System.out(5750): {diamerisma2=[nomos6], diamerisma3=[nomos6], diamerisma1=[nomos6]}
(在SELECT语句来自负责管理查询功能)
正如你可以看到输出,在每个循环之后,数值正在被新的覆盖...我想要{diamerisma1=[nomos1, nomos3, nomos5], diamerisma2=[nomos2, nomos4], diamerisma3=[nomos6]}
也许有些事我想念HashMaps是如何工作的......我真的很感激,如果有人能指出我错在哪里
在此先感谢,感谢您的阅读!
'也许有件事我怀念包含HashMap如何work'而不是......它似乎你错过了不创建新对象的观点并不是创建新对象(所以你使用的是相同的 - 'tempNomoi'实例) – Selvin
@Selvin所以你说我需要和listDataHeader的大小一样多的对象哈希表工作? – KayKo
嗯,不,我认为你应该创建tempNomoi的新实例,而不是在循环内清除它...因为现在你添加相同的实例,但使用不同的键(到listDataChild hashmap) – Selvin