将项目保存为"收藏夹"并在其他Recyclerviews上显示它

时间:2016-08-20 14:31:07

标签: android android-recyclerview retrofit2

我有1个viewpager,主页有2页,收藏夹。两者都有RecyclerViews,带有无尽的卷轴,在15个项目后,它从服务器加载另外15个,依此类推。我想实现一个选项,将来自recyclerView的项目添加到收藏夹并刷新这两个recyclerViews。我可以将它们添加到收藏夹中或删除它们(如果已添加)。我已经实现了它,它完美无缺。

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

我不知道如何解决这个问题:/其他从服务器询问另一个查询,并将其加载到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 个答案:

答案 0 :(得分:1)

如果我是你,我会按照以下步骤操作:

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-还要确保您的数据库 Singleton

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