Адаптер Recyclerview не возвращает правильную видимость

У меня проблема с моим recyclerview. По сути, его адаптер представляет собой отсортированный список, и при соблюдении определенных критериев слева от имени элемента появляется цветная галочка.

Моя проблема в том, что эта галочка иногда случайным образом появляется на предметах, на которых она не должна появляться. Обычно, когда я прокручиваю список вниз, затем снова вверх.

RecyclerView с правильными галочками

После прокрутки вниз и назад второй элемент получает галочку, хотя он не должен

Это onBindViewHolder адаптера:

@Override
public void onBindViewHolder(MyViewHolder holder, final int position) { 
[...]
SharedPreferences prefcorsi = contesto.getSharedPreferences(Costanti.ISCRIZIONECORSI,Context.MODE_PRIVATE);
    SharedPreferences prefgruppi = contesto.getSharedPreferences(Costanti.ISCRIZIONEGRUPPI,Context.MODE_PRIVATE);

    if (evento.getIdgruppo() > 0 && prefgruppi.getInt(Integer.toString(evento.getIdgruppo()),0) > 0) {
        holder.checkiscritto.setVisibility(View.VISIBLE);
        Log.w("Iscritto gruppo adapter",evento.getTitolo());
    } else if (prefcorsi.getInt(Integer.toString(evento.getId()),0) > 0 && evento.getStatoiscrizione() > 0) {
        holder.checkiscritto.setVisibility(View.VISIBLE);
        Log.w("Iscritto da adapter",evento.getTitolo());
    }

Я на 100% уверен, что это не проблема где-то еще, так как 1) Log.w не показывает неисправный элемент, рядом с ним появляется галочка. 2) Общие предпочтения и метод получения объекта возвращают правильные значения.

Может быть, это ошибка или слишком много элементов для обработки?

Вам необходимо явно установить видимость GONE / INVISIBLE, когда оба условия if ложны; то есть в финальном else.

Mike M. 18.04.2018 00:32

Ваш зритель не использует параметр position, что кажется подозрительным ...

stkent 18.04.2018 00:33

@MikeM. спасибо, правильный ответ.

G. C. 18.04.2018 00:43
0
3
21
0

Другие вопросы по теме