将项目保存为“收藏夹”并在其他回收站视图中显示
我有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-也会使你的数据库辛格尔顿推荐使用。
通过这些步骤,您的问题将得到解决。
这似乎是一个聪明的解决方案。但问题是,我有2个查询服务器。 1.用于家庭,2.用于收藏。所以当Home被加载时,我什么都不做......当收藏夹加载时,我将它们全部添加到数据库中,然后我只检查按钮addFav是否已单击,然后发送到服务器并保存到数据库。这是我从你的解决方案中了解到的,但是如何将该项目添加到收藏夹片段或将其删除? 'adapter.notifyDataSetChanged();'只会刷新feedlist。但是,有2个家庭1和1个Favs的饲料列表。如果你知道我在说什么? :) – WinterChilly
@WinterChilly在收藏夹片段中调用adapter.notifyDataSetChanged()。 – Amir
在你最喜欢的适配器里面你的单身数据库完成你想要的东西:) – Amir