无法将ArrayList项显示到多列ListView中

时间:2017-06-05 21:20:22

标签: android listview firebase arraylist firebase-realtime-database

在我的LogCat中,我将这些详细信息从我的firebase数据库中提取出来。

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 。只有ArrayList的最后一个值显示在Children列中。

如何在多列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 个答案:

答案 0 :(得分:1)

将适配器代码放在for循环之外,并为变量记录

创建新对象
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) {}
    });