2017-06-05 53 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