我有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));
}
});
}
任何想法,建议,解决方案?
答案 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 。
通过这些步骤,您的问题将得到解决。