将项目保存为“收藏夹”并在其他回收站视图中显示

问题描述:

我有1个viewpager,包含2个主页,收藏夹。两者都有RecyclerViews,有无尽的卷轴,15个项目之后它会从服务器载入另外15个等等。我想实现一个选项,将recyclerView中的项目添加到收藏夹并刷新这两个recyclerViews。我可以将它们添加到收藏夹或删除它们,如果它们添加。我已经有了这个实现,它的工作原理非常完美。将项目保存为“收藏夹”并在其他回收站视图中显示

问题是,如果我将项目添加到收藏夹,它不会刷新其他RecyclerView。我有一个想法,即每次添加或从收藏夹中删除时,其他片段都会重新启动,因此它会从服务器请求另一个查询,并且只是将它们加载到回收站视图中。它的工作,但你总是放在顶部,这不是一个好的用户体验。您可以打开项目并获取有关该项目的更多信息,并且可以将它们添加到该活动内的收藏夹中。所以当我从那个活动回来时,一切都保持不变,就像你没有把它们添加到收藏夹一样。但实际上你做到了。

我不知道如何解决这个问题:/ other从服务器询问另一个查询,并将其加载到RecylerView中。如果我没有实现无尽的滚动,我可能共享双方的项目,但我必须有无尽的滚动,太多的数据将被浪费。

这是我RecyclerView适配器的样子:

 customViewHolder.llLike.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      final String fontAwesomeFullHeart = mContext.getString(R.string.fa_heart); 
      final String getLikeText = customViewHolder.tvPicLike.getText().toString(); 
      if (getLikeText == fontAwesomeFullHeart) { 
       MyFunctions.showNotToFavoriteHeart(mContext, customViewHolder.tvPicLike, customViewHolder.tvLike); 
       API_Network_Service.serverRemoveFromFavorites(mContext, feedItem.getId(), logged_in, customViewHolder.tvPicLike); 
      } else { 
       MyFunctions.showFavoriteHeart(mContext, customViewHolder.tvPicLike, customViewHolder.tvLike); 
       API_Network_Service.serverAddToFavorites(mContext, feedItem.getId(), logged_in, customViewHolder.tvPicLike); 
      } 
     } 
    }); 

这是从API_SERVICE_CLASS:

public static void serverAddToFavorites(final Context mContext, String apartment_id, RealmUser_Personal user, final TextView tvLike) { 
    String user_id = user.getId(); 
    HashMap<String, String> map = new HashMap<>(); 
    map.put("user_id", user_id); 
    HashMap<String, Object> mapMeta = new HashMap<>(); 
    mapMeta.put("meta", map); 
    mapMeta.put("entry_id", apartment_id); 
    final ApiUporabnik apiService = ApiClient.getAPIUser().create(ApiUporabnik.class); 
    Call<FavoriteAdd> saveFavorite = apiService.favoriteAdd(API_KEY, mapMeta); 
    saveFavorite.enqueue(new Callback<FavoriteAdd>() { 
     @Override 
     public void onResponse(Call<FavoriteAdd> call, Response<FavoriteAdd> response) { 
      Log.d("Saved FAV", ""); 
      //TODO Refresh item everywhere 
     } 

     @Override 
     public void onFailure(Call<FavoriteAdd> call, Throwable t) { 
      Log.e("E: Failed FAV", t.toString()); 
      tvLike.setText(mContext.getString(R.string.fa_heart_o)); 
     } 
    }); 
} 

任何意见,建议,解决方案吗?

如果我是你,我做以下步骤:

1-创建持有喜欢的物品Id's的数据库。

2。在您的主页adapter检查被添加到数据库或不符合这样的事情:

database.isFavoriteItems(Your_Items_ID); 

3-当点击喜欢的Button,如果Database存在,则添加新项Database如果以前添加删除它。

if(database.isFavoriteItem(Your_Items_ID)){ 
database.addToFavorite(Your_Items_ID); 
} else { 
database.removeFromFavorite(Your_Items_ID); 
} 

4-滚动时最喜爱的清单在您的通话片段里面notifyDataSetChanged

@Override 
public void setUserVisibleHint(boolean visible){ 
    super.setUserVisibleHint(visible); 
    if (visible){ 
     adapter.notifyDataSetChanged(); 
    } 
} 

5-也会使你的数据库辛格尔顿推荐使用。

通过这些步骤,您的问题将得到解决。

+0

这似乎是一个聪明的解决方案。但问题是,我有2个查询服务器。 1.用于家庭,2.用于收藏。所以当Home被加载时,我什么都不做......当收藏夹加载时,我将它们全部添加到数据库中,然后我只检查按钮addFav是否已单击,然后发送到服务器并保存到数据库。这是我从你的解决方案中了解到的,但是如何将该项目添加到收藏夹片段或将其删除? 'adapter.notifyDataSetChanged();'只会刷新feedlist。但是,有2个家庭1和1个Favs的饲料列表。如果你知道我在说什么? :) – WinterChilly

+0

@WinterChilly在收藏夹片段中调用adapter.notifyDataSetChanged()。 – Amir

+0

在你最喜欢的适配器里面你的单身数据库完成你想要的东西:) – Amir