Положение в recylerview изменяется при прокрутке - PullRequest
3 голосов
/ 29 мая 2019

Похоже, что позиция в recylerview изменяется при прокрутке.

То, что я хочу сделать, это так.

Adapter.java

@Override
public void onBindViewHolder(aViewHolder holder, int position) {

    if (position == 0) {
        holder.zeroIcon.setVisibility(View.VISIBLE);
    } else if (position == 1) {
        holder.oneIcon.setVisiblity(View.VISIBLE);
    } else {
        holder.otherIcon.setVisiblity(View.VISIBLE);
    }

    // Set text on each item
    ...
}


@Override
public int getItemCount() { return models.size(); }

public class aViewHolder extends RecyclerView.ViewHolder {

    private ImageView zeroIcon;
    private ImageView oneIcon;
    private ImageView otherIcon;


    public aViewHolder(View itemView) {
        super(itemView);
        zeroIcon = itemview.findViewById(...);
        ...
    }
}

Я установил видимость этих значков GONE по умолчанию в файле xml.

Когда я сначала вижу recylerview, значки отображаются так, как я ожидал, в зависимости от его положения.

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

Как я могу это исправить?

list_item.xml вот так.

<RelativeLayout ...>

     <ImageView
         android:id="@+id/zero"
         android:visiblity="gone"
         android:background="@drawable/zero" />

     <ImageView
         android:id="@id/one"
         android:visiblity="gone"
         android:background="@drawable/one" />

     <ImageView
         android:id="@id/other"
         android:visiblity="gone"
         android:background="@drawable/other" />

1 Ответ

8 голосов
/ 29 мая 2019

Измените его таким образом,

if (position == 0) {
    holder.zeroIcon.setVisibility(View.VISIBLE);
    holder.otherIcon.setVisiblity(View.GONE);
    holder.oneIcon.setVisiblity(View.GONE);
} else if (position == 1) {
    holder.oneIcon.setVisiblity(View.VISIBLE);
    holder.zeroIcon.setVisibility(View.GONE);
    holder.otherIcon.setVisiblity(View.GONE);
} else {
    holder.otherIcon.setVisiblity(View.VISIBLE);
    holder.oneIcon.setVisiblity(View.GONE);
    holder.zeroIcon.setVisibility(View.GONE);
}

В RecyclerView вы должны управлять другими видами также при изменении элемента.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...