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

Java 滚动时recylerview中的位置会发生变化,java,android,android-recyclerview,Java,Android,Android Recyclerview,在滚动时,recylerview中的位置似乎发生了变化 我想做的就是这样 <RelativeLayout ...> <ImageView android:id="@+id/zero" android:visiblity="gone" android:background="@drawable/zero" /> <ImageView android:id="@id/one"

在滚动时,recylerview中的位置似乎发生了变化

我想做的就是这样

<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" />
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(...);
        ...
    }
}
我在
xml
文件中将这些图标的可见性设置为默认值

当我第一次看到recylerview时,图标会根据其位置按预期显示

但是,当我向下滚动和向上滚动时,错误的图标也会显示在错误的位置上。 Like
otherIcon
在上下滚动时显示在第一项和第二项上。向下滚动时,
zeroIcon
oneIcon
会显示在一些其他项目上

我怎样才能解决这个问题

list\u 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" />

以这种方式修改它

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
中,您应该在更改项目的同时管理其他视图。

您可以共享回收项目的xml吗尝试共享适配器的完整代码,并且不要放置。。。也许bug是你根本没有想到的地方,它发生在
ListView
RecyclerView
中。若并没有值,你们需要设置初始变量。Android recyclerview反复使用单元格,这意味着若你们向下滚动,那个么第一位置的内存将被重新用于另一个项目,所以这会引起你们的问题。添加holder.oneIcon.setVisibility(View.GONE);和holder.otherIcon.setVisibility(View.GONE);在bindview的第一个if条件中,其他条件也一样。这肯定会对您有所帮助。请在设置可见性后添加onItemChanged