从Firebase动态更新getChildCount()?

时间:2016-12-27 18:57:40

标签: android firebase firebase-realtime-database

我尝试使用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动态更新而不会无限循环?

1 个答案:

答案 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

希望得到这个帮助。