我一直在嘗試將近一天來解決這個問題,但我無法弄清楚什麼是錯的。使用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