Android - Firebase - Viewholder,名为After onChildRemoved的自定义方法 - 所以没有更改

时间:2016-07-01 14:33:10

标签: android database firebase

所以我有一个 recyclerView with viewHolder ,允许用户喜欢/不喜欢一个项目。单击该图标外部时,我们会显示页面详细信息;哪个工作正常。 (见下图)

问题:我有一个"喜欢"列出喜欢的项目的活动,当不知道其中一个项目时,相应的项目应该在触发onChildRemoved时消失。不幸的是,我意识到onChildRemoved是在unliking方法之前触发的。

修改 - 澄清:不受欢迎的方法会从Firebase数据库中删除该项目;但是没有"刷新"在UI上,该项目仍在那里。

问题:如何在onChildRemoved之前触发unliking方法?或者我应该实现另一个监听器,但是如何?

在Logs:

中显示的序列下方
07-01 16:21:30.761 17802-17802/com.yatoo V/com.item: in on Child Added
07-01 16:21:30.761 17802-17802/com.yatoo V/com.item: Get Updates Called
07-01 16:21:36.731 17802-17802/com.yatoo V/com.item: in on Child Removed
07-01 16:21:36.731 17802-17802/com.yatoo V/com.item: Get Updates Called
07-01 16:21:36.911 17802-17802/com.yatoo V/com.item: Viewholder in on complete Unlike - Item Removed

喜欢/不同的方法在视点中

    @Override
        public void liked(LikeButton likeButton) {

            mFirebaseRef = FirebaseDatabase.getInstance().getReference();
            DatabaseReference queryRef = mFirebaseRef.child("users").child(UserUID).child("favorites").child(item.getUniqueID());

            queryRef.setValue(item, new DatabaseReference.CompletionListener() {
                @Override
                public void onComplete(DatabaseError firebaseError, DatabaseReference firebase) {
                    if (firebaseError != null) {
                        Utils.showSnack(itemView, R.string.error_data_not_saved +" "+firebaseError.getMessage());
                    }
                }
            });
        }

        @Override
        public void unLiked(LikeButton likeButton) {

            mFirebaseRef = FirebaseDatabase.getInstance().getReference();
            DatabaseReference queryRef = mFirebaseRef.child("users").child(UserUID).child("favorites").child((item.getUniqueID()));

            queryRef.setValue(null, new DatabaseReference.CompletionListener() {
                @Override
                public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
                    Log.v(Constants.LOG_TAG, "Viewholder: in on complte Unlike");
                    Utils.showSnack(itemView, context.getString(R.string.item_favorite_removed));
                }
            });

            queryRef.removeValue();
        }

这是带有" getUpdates"的recyclelerView代码。以下方法

RecyclerView favoritesRecyclerView = (RecyclerView)findViewById(R.id.favorites_recyclerview);
            GridLayoutManager gridLayoutManager = new GridLayoutManager(this,  2);
            favoritesRecyclerView.setLayoutManager(gridLayoutManager);

            userUID = SharedPreferenceManager.getUserUid(this);

            mUserFirebase = FirebaseDatabase.getInstance().getReference().child("users").child(userUID).child("favorites");

            ChildEventListener childEventListener = new ChildEventListener() {
                @Override
                public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                    Log.v(Constants.LOG_TAG, "in on Child Added");
                    getUpdates(dataSnapshot);
                }

                @Override
                public void onChildChanged(DataSnapshot dataSnapshot, String s) {
                    Log.v(Constants.LOG_TAG, "in on Child Changed");
                    getUpdates(dataSnapshot);
                }

                @Override
                public void onChildRemoved(DataSnapshot dataSnapshot) {
                    Log.v(Constants.LOG_TAG, "in on Child Removed");
                    getUpdates(dataSnapshot);
                }

                @Override
                public void onChildMoved(DataSnapshot dataSnapshot, String s) {
                    Log.v(Constants.LOG_TAG, "in on Child Moved");
                }

                @Override
                public void onCancelled(DatabaseError databaseError) {
                }
            };

            mUserFirebase.addChildEventListener(childEventListener);
            itemList = new ArrayList<>();
            itemAdapter = new ItemAdapter(this);
            itemAdapter.setListener(this);
            favoritesRecyclerView.setAdapter(itemAdapter);

        }

活动中的相应getUpdates方法

 public void getUpdates(DataSnapshot dataSnapshot){

    itemList.clear();

    if (dataSnapshot.getChildrenCount() > 0) {
        Log.v(Constants.LOG_TAG, "Get Updates Called");
        Item item = dataSnapshot.getValue(Item.class);
        itemList.add(item);
        itemAdapter.refreshItem(itemList);
    }
 }

Item and like/unlike icon

1 个答案:

答案 0 :(得分:0)

我终于想出了一个解决方案。 我在适配器中实现了一个监听器,一切顺利。