我有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));
}
});
}
任何意見,建議,解決方案嗎?
這似乎是一個聰明的解決方案。但問題是,我有2個查詢服務器。 1.用於家庭,2.用於收藏。所以當Home被加載時,我什麼都不做......當收藏夾加載時,我將它們全部添加到數據庫中,然後我只檢查按鈕addFav是否已單擊,然後發送到服務器並保存到數據庫。這是我從你的解決方案中瞭解到的,但是如何將該項目添加到收藏夾片段或將其刪除? 'adapter.notifyDataSetChanged();'只會刷新feedlist。但是,有2個家庭1和1個Favs的飼料列表。如果你知道我在說什麼? :) – WinterChilly
@WinterChilly在收藏夾片段中調用adapter.notifyDataSetChanged()。 – Amir
在你最喜歡的適配器裏面你的單身數據庫完成你想要的東西:) – Amir