2016-07-20 8 views
0

Experten,So erstellen Sie Daten für erweiterbare Liste Adapter auf intelligente Weise

Unten Code ist, Daten für ExpandableListAdapter zu erhalten. Ich habe ein Problem mit der Liste Temp.

Lassen Sie sagen, ich unten Daten in db haben:

Header-A, Child 123.111

Header-B, Kind 456.444

Header-C, Kind 789.777

Das Ergebnis erwarte ich ist:

expListChild.put (A, 123,111); // (Ist-Ergebnis: expListChild.put (A, 123.111.456.444.789.777)

expListChild.put (B, 456.444); // (Ist-Ergebnis: expListChild.put (B, 123.111.456.444.789.777)

expListChild.put (C , 789.777); // (tatsächliches Ergebnis: expListChild.put (C, 123,111,456,444,789,777)

Ich weiß nicht, wie zu tun, ich habe gedacht, verwenden Sie temp1, temp2, aber ich weiß nicht, wie viele Zeilen in Cursor cHeader

Könnten Sie mir bitte helfen? Danke. Ich schätze das Problem ist, ich weiß nicht, wie man eine Reihe von Variablen erstellt.

List<String> expListHeader = new ArrayList<>(); 
HashMap<String, List<String>> expListChild = new HashMap<>(); 
List<String> temp = new ArrayList<>(); 

void xxx() { 
    Cursor cHeader = db.rawQuery("XXX", null); 
    cHeader.moveToFirst(); 
    while (cHeader.moveToNext()) 
    { 
     String headerStr = cHeader.getString(0); 
     expListHeader.add(headerStr); 

     Cursor cChild = db.rawQuery("XXX", null); 
     cChild.moveToFirst(); 
     while (cChild.moveToNext()) { 
      String childStr = cChild.getString(0); 
      temp.add(childStr); 
     } 
     cChild.close(); 

     expListChild.put(headerStr, temp); 
    } 
} 
+0

Got stecken hier wirklich brauchen Hilfe ... – caibirdcnb

+0

Sie sollten pojo für diese und setzen verwenden und alle Daten mit diesem pojo – Vickyexpert

Antwort

1

Put temp.clear() vor Cursor cChild = db.rawQuery("XXX", null); alle Objekte Liste in Ihrem temporären freizugeben.

Aktualisiert (da ich dumm war)

Liste expListHeader = new Arraylist <>(); HashMap> expListChild = neue HashMap <>();

void xxx() { 
    Cursor cHeader = db.rawQuery("XXX", null); 
    cHeader.moveToFirst(); 
    while (cHeader.moveToNext()) { 
     String headerStr = cHeader.getString(0); 
     expListHeader.add(headerStr); 

     List<String> temp = new ArrayList<>(); 
     Cursor cChild = db.rawQuery("XXX", null); 
     cChild.moveToFirst(); 
     while (cChild.moveToNext()) { 
      String childStr = cChild.getString(0); 
      temp.add(childStr); 
     } 
     cChild.close(); 

     expListChild.put(headerStr, temp); 
    } 
} 
+0

In diesem Fall bekommen, nur bekommen expListChild.put (C, 789.777); kann nicht bekommen A, B – caibirdcnb

+0

Sorry, das war mein Tippfehler. Feste Antwort –

+0

Danke. Das ist, was ich am Anfang gedacht habe, aber es würde (A, null), (B, null), (C, 789777) werden. Es scheint, dass expListChild.put (xx, temp) nur temp verlinkt, nicht den Wert von temp nach expListChild kopiert, jede Änderung in temp würde expListChild sogar nach der .put-Anweisung beeinflussen. – caibirdcnb