如何让 recyclerview 适配器知道存储在 firebase 中的列表现在从另一个 activity 中变为空?

How to let a recyclerview adapter know that a list that is stored in firebase is now null from another activity?

我有一个收藏功能,我将用户最喜欢的动物存储在 firebase 中,作为用户 ID 下的最喜欢的数组。您可以从 recyclerview 列表中收藏一个动物,或者如果您从列表中单击一个动物,它将转到一个详细页面,您可以在那里收藏该动物。这对于收藏和取消收藏非常有用,除非您取消收藏用户的最后一个动物导致收藏列表为空。在 firebase 端,一切都很好,但是当您单击返回以转到列表时,UI 仍然将其显示为收藏,即使它不是。

详细设置收藏activity

if (user != null) {
                //first check if favourited
                if (favouritesList != null && favouritesList.contains(animalModel.getId())) {
                    btnFavourite.setImageResource(R.drawable.ic_favorite_white_36dp);
                } else {
                    btnFavourite.setImageResource(R.drawable.ic_favorite_border_white_36dp);
                }
                btnFavourite.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        //if favourited, unfavourite
                        if (favouritesList != null && favouritesList.contains(animalModel.getId())) {
                            btnFavourite.setImageResource(R.drawable.ic_favorite_border_white_36dp);
                            favouritesList.remove(animalModel.getId());
                            reference.setValue(favouritesList);
                        } else {
                            btnFavourite.setImageResource(R.drawable.ic_favorite_white_36dp);
                            if (favouritesList == null) { //if favourites list is null
                                favouritesList = new ArrayList<>();
                                favouritesList.add(animalModel.getId());
                            } else {
                                favouritesList.add(animalModel.getId());
                            }
                            reference.setValue(favouritesList);
                        }

                    }
                });
            }

在托管 recyclerview onCreate 的片段中调用此 getFavourites() 方法:

public void getFavourites(){
    FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();

    if (user != null){
        String userUid = user.getUid();
        reference = FirebaseDatabase.getInstance().getReference(Common.USER).child(userUid).child(Common.FAVOURITE);
        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                GenericTypeIndicator<ArrayList<String>> t = new GenericTypeIndicator<ArrayList<String>>() {};
                favouritesList = (ArrayList<String>)dataSnapshot.getValue(t);
                if (favouritesList != null){
                    animalAdapter.setFavouritesList(favouritesList);
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }
}

相关适配器代码:

@Override
    public void onBindViewHolder(final ViewHolder holder, int position){

        final AnimalType animalModel = mAnimalList.get(position);
        FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
        //if user logged in
        if (user != null) {
            //first check if favourited
            if (favouritesList != null && favouritesList.contains(animalModel.getId())) {
                holder.btnFavourite.setImageResource(R.drawable.ic_favorite_white_36dp);
            } else {
                holder.btnFavourite.setImageResource(R.drawable.ic_favorite_border_white_36dp);
            }

            String userUid = user.getUid();
            reference = FirebaseDatabase.getInstance().getReference(Common.USER).child(userUid).child(Common.FAVOURITE);
            holder.btnFavourite.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //if favourited, unfavourite
                    if (favouritesList != null && favouritesList.contains(animalModel.getId())){
                        holder.btnFavourite.setImageResource(R.drawable.ic_favorite_border_white_36dp);
                        favouritesList.remove(animalModel.getId());
                        reference.setValue(favouritesList);
                    }
                    else{
                        holder.btnFavourite.setImageResource(R.drawable.ic_favorite_white_36dp);
                        if(favouritesList == null){ //if favourites list is null
                            favouritesList = new ArrayList<>();
                            favouritesList.add(animalModel.getId());
                        }else{
                            favouritesList.add(animalModel.getId());
                        }
                        reference.setValue(favouritesList);
                    }
                }
            });

        } else {
            //if user not logged in

        }
    }

    public void setFavouritesList(List<String> favouritesList){
        this.favouritesList = favouritesList;
        notifyDataSetChanged();
    }

我找到了。在 getFavourites() 方法中,它应该从

if (favouritesList != null){
                    animalAdapter.setFavouritesList(favouritesList);
                }

animalAdapter.setFavouritesList(favouritesList);