2017-06-05 54 views
0

在我的LogCat中,我有從我的Firebase數據庫中提取的這些詳細信息。無法將ArrayList項目顯示到多列ListView中

06-05 16:14:09.454 D: 3. DataSnapshot VALUE : {familyName=Richardson, children=[Sam, Jin, Peter], fatherName=Daniel, checkInTime=Mon, Jun 05 04:13 PM} 
06-05 16:14:09.456 D: 4. DataSnapshot VALUE : {motherName=Alice, checkOutTime=Mon, Jun 05 04:13 PM, familyName=Richardson, children=[Sam, Peter, Jin]} 

我用多列ListView顯示下面的數據。但是,這裏的問題是我無法顯示children數據,因爲它是ArrayList。在Children列中只顯示ArrayList的最後一個值。

如何在多列ListView中顯示ArrayList的所有值。任何人都可以建議我嗎

這是我的代碼:

checkInCheckOutDBReference.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
    int i = 0; 
    for (DataSnapshot ds: dataSnapshot.getChildren()) { 
     i++; 
     String fatherNameValue = ds.child("fatherName").getValue(String.class); 
     String motherNameValue = ds.child("motherName").getValue(String.class); 

     HashMap < String, String > record = new HashMap < >(); 

     Log.d(TAG, i + ". DataSnapshot VALUE : " + ds.getValue()); 

     familyNameColumn = ds.child("familyName").getValue(String.class); 
     record.put(FAMILY_NAME_COLUMN, familyNameColumn); 

     for (DataSnapshot cds: ds.child("children").getChildren()) { 
     record.put(CHILD_NAME_COLUMN, cds.getValue().toString()); 
     } 
     // CHECK IN TIME 
     checkInTime = ds.child("checkInTime").getValue(String.class); 
     record.put(CHECKIN_COLUMN, checkInTime); 
     // CHECKOUT TIME 
     checkOutTime = ds.child("checkOutTime").getValue(String.class); 
     record.put(CHECKOUT_COLUMN, checkOutTime); 

     for (DataSnapshot snap: ds.getChildren()) { 
     Log.d(TAG, "*Key: " + snap.getKey()); 
     if (snap.getKey().equals("checkInTime")) { 
      myCheckIn = "1"; 
      myCheckOut = "0"; 
     } 
     if (snap.getKey().equals("checkOutTime")) { 
      myCheckOut = "1"; 
      myCheckIn = "0"; 
     } 
     if (snap.getKey().equals("fatherName")) { 
      myParent = fatherNameValue; 
     } 
     if (snap.getKey().equals("motherName")) 
      myParent = motherNameValue; 
     } 
     if (myCheckIn.equals("1")) { 
     record.put(PARENT_CHECKIN_COLUMN, myParent); 
     } 
     if (myCheckOut.equals("1")) { 
     record.put(PARENT_CHECKOUT_COLUMN, myParent); 
     } 
     list.add(record); 
     ReportAdapter adapter = new ReportAdapter(GeneratereportActivity.this, list); 
     reportListView.setAdapter(adapter); 
    } 

    } 
    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}); 

回答

1

把你的適配器代碼的外面循環,同時還爲變量記錄

ReportAdapter adapter = new ReportAdapter(GeneratereportActivity.this, list); 
reportListView.setAdapter(adapter); 

這個,否則每一次,如創建新的對象,對象將覆蓋,你將只能得到最後的值

checkInCheckOutDBReference.addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      int i = 0; 
      for (DataSnapshot ds: dataSnapshot.getChildren()) { 
       i++; 

       record = new //your object 
       String fatherNameValue = ds.child("fatherName").getValue(String.class); 
       String motherNameValue = ds.child("motherName").getValue(String.class); 

       HashMap < String, String > record = new HashMap < >(); 

       Log.d(TAG, i + ". DataSnapshot VALUE : " + ds.getValue()); 

       familyNameColumn = ds.child("familyName").getValue(String.class); 
       record.put(FAMILY_NAME_COLUMN, familyNameColumn); 

       for (DataSnapshot cds: ds.child("children").getChildren()) { 
        record.put(CHILD_NAME_COLUMN, cds.getValue().toString()); 
       } 
       // CHECK IN TIME 
       checkInTime = ds.child("checkInTime").getValue(String.class); 
       record.put(CHECKIN_COLUMN, checkInTime); 
       // CHECKOUT TIME 
       checkOutTime = ds.child("checkOutTime").getValue(String.class); 
       record.put(CHECKOUT_COLUMN, checkOutTime); 

       for (DataSnapshot snap: ds.getChildren()) { 
        Log.d(TAG, "*Key: " + snap.getKey()); 
        if (snap.getKey().equals("checkInTime")) { 
         myCheckIn = "1"; 
         myCheckOut = "0"; 
        } 
        if (snap.getKey().equals("checkOutTime")) { 
         myCheckOut = "1"; 
         myCheckIn = "0"; 
        } 
        if (snap.getKey().equals("fatherName")) { 
         myParent = fatherNameValue; 
        } 
        if (snap.getKey().equals("motherName")) 
         myParent = motherNameValue; 
       } 
       if (myCheckIn.equals("1")) { 
        record.put(PARENT_CHECKIN_COLUMN, myParent); 
       } 
       if (myCheckOut.equals("1")) { 
        record.put(PARENT_CHECKOUT_COLUMN, myParent); 
       } 
       list.add(record); 

      } 

      ReportAdapter adapter = new ReportAdapter(GeneratereportActivity.this, list); 
      reportListView.setAdapter(adapter); 

     } 
     @Override 
     public void onCancelled(DatabaseError databaseError) {} 
    }); 
+0

即使現在只有最後一個值得到顯示。這實際上是指什麼? 'record = new // your object'我已經有了這個聲明。 'HashMap record = new HashMap < >();' – Chip

+0

您是否將HashMap 的列表設置爲適配器。 –

+0

是的,我在這裏正是這樣做的。 'ReportAdapter adapter = new ReportAdapter(GeneratereportActivity.this,list); '。在該列表中有所有記錄。 – Chip