如何让 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);
我有一个收藏功能,我将用户最喜欢的动物存储在 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);