2016-08-20 20 views
0

我有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

如果我是你,我做以下步驟:

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-也會使你的數據庫辛格爾頓推薦使用。

通過這些步驟,您的問題將得到解決。

+0

這似乎是一個聰明的解決方案。但問題是,我有2個查詢服務器。 1.用於家庭,2.用於收藏。所以當Home被加載時,我什麼都不做......當收藏夾加載時,我將它們全部添加到數據庫中,然後我只檢查按鈕addFav是否已單擊,然後發送到服務器並保存到數據庫。這是我從你的解決方案中瞭解到的,但是如何將該項目添加到收藏夾片段或將其刪除? 'adapter.notifyDataSetChanged();'只會刷新feedlist。但是,有2個家庭1和1個Favs的飼料列表。如果你知道我在說什麼? :) – WinterChilly

+0

@WinterChilly在收藏夾片段中調用adapter.notifyDataSetChanged()。 – Amir

+0

在你最喜歡的適配器裏面你的單身數據庫完成你想要的東西:) – Amir

相關問題