2014-05-13 47 views
-1

我一直在尝试将近一天来解决这个问题,但我无法弄清楚什么是错的。使用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是如何工作的......我真的很感激,如果有人能指出我错在哪里

在此先感谢,感谢您的阅读!

+0

'也许有件事我怀念包含HashMap如何work'而不是......它似乎你错过了不创建新对象的观点并不是创建新对象(所以你使用的是相同的 - 'tempNomoi'实例) – Selvin

+0

@Selvin所以你说我需要和listDataHeader的大小一样多的对象哈希表工作? – KayKo

+0

嗯,不,我认为你应该创建tempNomoi的新实例,而不是在循环内清除它...因为现在你添加相同的实例,但使用不同的键(到listDataChild hashmap) – Selvin

回答

0

嗨下面的代码一些帮助你

View.OnClickListener listOnClick = new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     favoriteList = db.getFavList(); 
     listView.setAdapter(new ViewAdapter()); 
     } 
    }; 

//Get FavList 
public List<FavoriteList> getFavList(){ 
    String selectQuery = "SELECT * FROM " + TABLE_TEST; 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 
    List<FavoriteList> FavList = new ArrayList<FavoriteList>(); 
    if (cursor.moveToFirst()) { 
    do { 
    FavoriteList list = new FavoriteList(); 
    list.setId(Integer.parseInt(cursor.getString(0))); 
    list.setName(cursor.getString(1)); 
    list.setAge(cursor.getString(2)); 
    FavList.add(list); 
    } while (cursor.moveToNext()); 
    } 
    return FavList; 
} 

如果您需要更详细,请参阅以下链接 http://mylearnandroid.blogspot.in/2014/04/android-sqlite-with-custom-listview.html

+0

那么,这并没有真正帮助我的问题,因为我知道如何填充我的列表...我只是坚持使用该HashMap! – KayKo