私は、2ページのメイン、お気に入りを持つ1つのビューページを持っています。どちらもRecyclerViewsを持っていて、無限のスクロールで、15個のアイテムの後にサーバーから別の15個をロードします。私は、recyclerViewのアイテムをお気に入りに追加し、両方のrecyclerViewをリフレッシュするオプションを実装したいと思います。お気に入りに追加したり、追加された場合は削除したりすることができます。私はすでにこれを実装しており、完全に機能しています。アイテムを「お気に入り」として保存し、他のリサイクルビューに表示する
お気に入りのアイテムを追加すると、他のRecyclerViewがリフレッシュされないという問題があります。私は、お気に入りを追加または削除するたびに、他のフラグメントが再起動するので、サーバーから別のクエリを要求し、リサイクラビューでロードするというアイデアがありました。それはうまくいったが、あなたは常にトップに置かれていた。これは良いUXではない。アイテムを開いてそのアイテムに関する詳細情報を取得し、そのアイテムをそのアクティビティ内のお気に入りに追加することができます。だから、私がその活動から帰ってきたとき、あなたが好きなものにそれらを加えなかったのと同じように、すべて同じままだった。しかし、実際にあなたがしました。
私はこの問題を解決する方法がわかりません:/他のサーバーから別のクエリを要求し、RecylerViewの内部に読み込みます。私は無限のスクロールを実装していない場合、私はおそらく両側のアイテムを共有することができますが、無限のスクロールを持たなければならず、あまりにも多くのデータが無駄になります。
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));
}
});
}
任意のアイデア、アドバイス、ソリューション
これはRecyclerViewのための私のアダプタがどのように見えるかですか?
これはスマートな解決策のようです。しかし、問題は、サーバーに2つのクエリがあることです。 1.ホーム用、2.お気に入り用。だからホームがロードされるときは何もしません。そしてお気に入りがロードされると、それらをデータベースに追加して、ボタンaddFavがクリックされたかどうかを確認してから、サーバーに送信してデータベースに保存します。これは私があなたの解決策から理解していることですが、そのアイテムをお気に入りのフラグメントに追加する方法や削除する方法はありますか? 'adapter.notifyDataSetChanged();'はフィードリストを更新するだけです。しかし、家庭用に1つ、お気に入り用に1つのフィードリストが2つあります。もし私が何を言っているのですか? :) – WinterChilly
@WinterChillyお気に入りのフラグメントのadapter.notifyDataSetChanged()を呼び出します。 – Amir
あなたの好みのアダプタの中であなたのシングルトンデータベースはあなたが望むものを正確に実行しました:) – Amir