滚动时recylerview中的位置发生变化

Oot*_*oto 3 java android recycler-adapter android-recyclerview

好像在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(...);
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

GONExml文件中将这些图标的可见性设置为默认值。

当我第一次看到recylerview时,图标将根据其位置显示在我期望的位置。

但是,当我向下滚动并向上滚动时,不正确的图标也会显示在不正确的位置。otherIcon上下滚动时,Like会显示在第一项和第二项上。向下滚动zeroIcononeIcon显示在其他项目上。

我怎样才能解决这个问题?

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" />
Run Code Online (Sandbox Code Playgroud)

Man*_*ath 8

以这种方式修改它,

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);
}
Run Code Online (Sandbox Code Playgroud)

RecyclerView更改项目时,您还应该管理其他视图。