Firebase onDataChange создать новый вид в ConstraintLayout

Я новичок в разработке Android и Firebase. Я ищу простой способ сделать следующую простую работу:

  1. Получить данные из базы данных Firebase
  2. Создать список флажок из данных

Вот мой код:

protected void AttachFirebaseListner(){
    DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("data");
    ValueEventListener listener = new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            int i = 0;
            for (DataSnapshot child : dataSnapshot.getChildren()) {
                String guid = child.getKey();
                DataObjects.Box box = child.getValue(DataObjects.Box.class);
                CreateCheckBox(i,guid,box);
                i++;
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    };
    ref.addListenerForSingleValueEvent(listener);
}

и функция для создания флажка:

protected void CreateCheckBox(int seq, String guid, DataObjects.Box box){
    ConstraintLayout layout = (ConstraintLayout) findViewById(R.id.constraintLayout);
    int currentID = 100+seq;
    int previousID = 100+(seq-1);

    ConstraintLayout.LayoutParams layoutParams = new ConstraintLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT);
    layoutParams.leftToLeft = PARENT_ID;
    if (seq == 0) { //first
        layoutParams.topToTop = PARENT_ID;
    }
    else {
        layoutParams.topToBottom = previousID;
    }

    CheckBox chkBox= new CheckBox(getApplicationContext());
    chkBox.setId(currentID);
    chkBox.setTag(guid);
    chkBox.setLayoutParams(layoutParams);
    chkBox.setText(box.name);

    layout.addView(chkBox);

    ConstraintSet set = new ConstraintSet();
    set.clone(layout);
    if (seq == 0) { //first
        set.connect(chkBox.getId(), ConstraintSet.TOP, layout.getId(), ConstraintSet.TOP);
    }
    else {
        set.connect(chkBox.getId(), ConstraintSet.TOP, previousID, ConstraintSet.BOTTOM);
    }
    set.applyTo(layout);
}

Однако кажется, что метод onDataChange является асинхронным, поэтому флажки не заполняются.

Как правильно это сделать?

Спасибо CL

1 ответ

Не уверенный, что я делаю это правильно, я заканчиваю тем, что добавляю представление списка в макет ограничения и использовал специальный адаптер массива для привязки моих данных к представлению списка.

руководство: https://github.com/codepath/android_guides/wiki/Using-an-ArrayAdapter-with-ListView

Другие вопросы по тегам