Сохранение элемента как «избранного» и показ его в других обзорах переработчиков

android android-recyclerview retrofit2

1992 просмотра

1 ответ

У меня есть 1 просмотр с 2 страницами основной, избранное. Оба имеют RecyclerViews с бесконечной прокруткой, после 15 элементов они загружают еще 15 с сервера и так далее. Я хочу реализовать опцию добавления элемента из recyclerView в избранное и обновления обоих recyclerView. Я могу добавить их в избранное или удалить их, если они добавлены. У меня уже есть это реализовано, и это работает, отлично.

Проблема в том, что если я добавлю элемент в избранное, он не обновит другой RecyclerView. У меня была идея, что при каждом добавлении или удалении из избранного другой фрагмент перезапускается, поэтому он запрашивает другой запрос с сервера, и вы просто загружаете их в представлении рециркулятора. Это сработало, но вы всегда были на вершине, что не очень хороший UX. Вы можете открыть элемент и получить дополнительную информацию об этом элементе, а также добавить его в избранное в этом упражнении. Поэтому, когда я вернулся из этого занятия, все осталось по-прежнему, как будто вы не добавили их в избранное. Но на самом деле вы сделали.

Я не знаю, как решить эту проблему: / другие запрашивают другой запрос с сервера и загружают его внутри 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));
        }
    });
}

Есть идеи, советы, решения?

Автор: WinterChilly Источник Размещён: 08.11.2019 11:26

Ответы (1)


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 действительно рекомендуемой.

С этими шагами ваша проблема будет исправлена.

Автор: Amir Размещён: 20.08.2016 04:02
Вопросы из категории :
32x32