2016-07-20 9 views
0

エキスパート、スマートな方法で拡張可能なリストアダプターのデータを作成する方法

以下のコードは、ExpandableListAdapterのデータを取得します。私はリストの温度についての問題があります。

レッツは、私は、DB内のデータの下に持っていると言う:

ヘッダーA、子供123111

ヘッダーB、子456444

ヘッダーC、子789777

私は期待した結果は次のとおりです。

expListChild.put(A、123,111); //(実際の結果:expListChild.put(A、123,111,456,444,789,777)

expListChild.put(B、456444); //(実際の結果:expListChild.put(B、123,111,456,444,789,777)

expListChild.put(C 、789,777); //(実際の結果:expListChild.put(C、123,111,456,444,789,777)

私は方法を知らない、私はtemp1、temp2の使用を考えてきたが、カーソルの行。

ありがとう。ありがとう。 私は、一連の変数を作成する方法がわからないということです。

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

ガットは、ここでは本当にあなたがこのためにPOJOを使用して設定し、その場合には、このPOJO – caibirdcnb

+0

...助けが必要に立ち往生。 A、Bを得ることができません – Vickyexpert

答えて

1

は、あなたの一時リスト内のすべてのオブジェクトを解放する前にCursor cChild = db.rawQuery("XXX", null);temp.clear()を入れてください。

(私は愚かだったので)更新

一覧expListHeader =新しいArrayListを<>(); HashMap> expListChild = new 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

を持つすべてのデータのみを取得expListChild.put(C、789777)を取得する必要 – caibirdcnb

+0

申し訳ありませんが、それは私のタイプミスでした。固定の答え –

+0

ありがとうございます。それは私が最初に考えたものですが、(A、null)、(B、null)、(C、789,777)になります。 expListChild.put(xx、temp)はtempをリンクするだけで、tempの値をexpListChildにコピーするのではなく、tempの変更は.putステートメントの後であってもexpListChildに影響します。 – caibirdcnb

関連する問題