我尝试使用Firebase中的信息更新RecyclerView。我已经成功地从Firebase更新了我的视图中的TextView,但是,这样做,我的当前代码不会使用数据库中的子项数量更新RecyclerView的getChildCount()而不会无限循环。
我目前的代码:(CardAdapter.java)
public int getChildCount() {
mDatabase = FirebaseDatabase.getInstance();
mReference = mDatabase.getReference();
final String userID = FirebaseAuth.getInstance().getCurrentUser().getUid();
ValueEventListener listener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot snap :
dataSnapshot.child("pet").child("users").child(userID).getChildren()) {
mChildCount = (int) snap.getChildrenCount();
}
notifyDataSetChanged();
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
mReference.addListenerForSingleValueEvent(listener);
return mChildCount;
}
此代码有效,但由于notifyDataSetChanged(),它无限循环;更新RecyclerView的方法。
我该怎么做才能使RecyclerView getChildCount()从Firebase动态更新而不会无限循环?
答案 0 :(得分:0)
您不应将代码放在let myDict = ["AUTOID-1": ["key1" : "val1_1", "key2" : "val2_1"],
"AUTOID-2": ["key1" : "val1_2", "key2" : "val2_2"],
"AUTOID-3": ["key1" : "val1_3", "key2" : "val2_3"]]
let key2Values = myDict.map{ key, value in (key: key, value: value["key2"]!) }
let minKey = key2Values.min(by: {$0.value < $1.value})?.key
let maxKey = key2Values.max(by: {$0.value < $1.value})?.key
print(minKey, maxKey)
内获取数据。我自己,通常把它放在getChildrenCount()
或Activity
的内部构造函数中。像这样:
Adapter
希望得到这个帮助。