将项目保存为 "Favorite" 并在其他回收站视图中显示

Saving an item as "Favorite" and showing it across other recyclerviews

我有 1 个 viewpager,其中有 2 个主要页面、收藏夹。两者都有 RecyclerViews,无限滚动,在 15 个项目之后它从服务器加载另外 15 个等等。我想实现一个选项,将 recyclerView 中的项目添加到收藏夹并刷新两个 recyclerView。如果添加了它们,我可以将它们添加到收藏夹或删除它们。我已经实现了这个并且它工作得很好。

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

我不知道如何解决这个问题:/其他人从服务器询问另一个查询,并将其加载到 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 时,如果 Not 存在于 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- 也让你的数据库Singleton 真心推荐。

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