【发布时间】:2017-06-25 13:05:09
【问题描述】:
我是 Android 开发和 Firebase 的新手。我正在寻找一种简单的方法来完成以下简单的工作:
- 从 Firebase 数据库中检索数据
- 根据数据创建复选框列表
这是我的代码:
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
【问题讨论】:
标签: android android-layout firebase-realtime-database android-constraintlayout