Добавление в избранное не сохраняется состояние - PullRequest
0 голосов
/ 16 мая 2018

У меня есть список туров в Android, и я пытаюсь добавить в избранное.Избранное работает для списка, который добавлен в myTours, но не работает для туров из списка поиска.

Это код:

private List<Tour> tourList;
holder.imgFavourite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(tourList.get(position).getFav().equalsIgnoreCase("0")) {
                   tourList.get(position).setFav("1");
                  //  listener.onFavourited(tourList.get(position), true);
                    holder.imgFavourite.setImageResource(R.drawable.faved);
                } else {
                    tourList.get(position).setFav("0");
                  //  listener.onFavourited(tourList.get(position), false);
                    holder.imgFavourite.setImageResource(R.drawable.not_faved);
                }
            }
        });

Здесь, когда я нажимаю на значок Fav, меняетсяв избранное.Но если я ищу другую категорию и снова возвращаюсь к этой категории, состояние не сохраняется.

Любая помощь будет признательна.

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Для представления переработчика всегда рассматривайте оба случая, только один случай заставляет ваш список изменить поведение (например, установить одно и то же изображение для другого элемента списка, потому что он использует ячейку для вашего просмотра). Вы делаете ошибку ниже.В bindviewholder вы получаете данные из класса модели и на основании этого устанавливаете ресурсы для imageview. Что хорошо.Но проблема в том, что нет причины для невыполнения условия, поэтому вы теряете состояние, и если вы прокручиваете вниз и снова приходите к этому элементу, вы теряете свое состояние или поведение лица, которое идет вразрез с вашим требованием.Так что просто предоставьте случай для несоответствия вашему состоянию.

0 голосов
/ 16 мая 2018

Listview / RecyclerView повторно использует представления.Если в вашем списке 20 элементов и 4 видны одновременно, при прокрутке эти представления используются повторно для отображения новых видимых представлений для экономии памяти.Таким образом, если вы измените вид в позиции 5, а затем прокрутите вниз и прокрутите назад до положения 5, вид, который вы изменили в положении 5, будет отличаться от того, который вы видите после прокрутки назад вверх.Следовательно, представление изменяется

Чтобы исправить это, сохраните глобальную переменную в адаптере, которая хранит любимую позицию, а в onBindViewHolder добавьте условие, например

if(position = favPosition)
    <Change to fav view>
else
    <Change to Normal View>

Условие else действительно важноили несколько представлений будут иметь вид избранного

...