0

필자는 선호하는 배열을 사용자 ID로 사용하여 firebase에 사용자가 좋아하는 동물을 저장하는 기능을 제공합니다. 당신은 recyclerview 명부에서 동물을 좋아할 수있다 또는 명부에서 동물을 클릭하는 경우에, 동물성을 거기에 마음에 들어 할 수있는 상세한 페이지에 갈 것이다. 이것은 좋아하는 목록을 null로 만드는 사용자의 마지막 동물을 unfavourite 할 때를 제외하고는 favouriting 및 unfavouriting에 좋습니다. firebase 끝에서는 모든 것이 좋지만 목록으로 돌아가려면 뒤로를 클릭해도 UI가 여전히 선호도를 표시합니다.firebase에 저장된 목록이 이제 다른 활동의 null이라는 것을 recyclerview 어댑터에 알리는 방법은 무엇입니까?

을하여 recyclerview에서 onCreate 호스팅하는 조각의 세부 활동이 getFavourites를 호출

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); 
         } 

        } 
       }); 
      } 

() 메소드에 favourited 설정 :

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(); 
    } 

답변

2

찾았습니다.() 메소드 getFavourites 그것은

animalAdapter.setFavouritesList(favouritesList); 

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

변경되어야

관련 문제