首页 > 解决方案 > 当 recylerview 上下滚动时,RecylerView 滚动问题数据已更改

问题描述

我附上了我的应用程序的 2 张图片,第一个是普通图片。但是当我滚动recyclerView数据时,请查看第二张图片。

这是正常的时候在此处输入图像描述

在我上下滚动之后 在此处输入图像描述

这是我的 MainActivity.java 代码

public class MainActivity extends AppCompatActivity {

    private  final String android_versions[]={
            "0",
            "1",
            "2",
            "3",
            "4",
            "5",
            "6",
            "7",
            "8",
            "9",
            "10",
            "11",
            "12",
            "13",
            "14",
            "15",
            "16",
            "17",
            "18",
            "19",
            "20",
            "14",
            "15",
            "16",
            "17",
            "18",
            "19",
            "20"

    };
    RecyclerView recyclerView;
    ItemAdapter itemAdapter;
    LinearLayoutManager linearLayoutManager;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        recyclerView = findViewById(R.id.recylerview);
        itemAdapter = new ItemAdapter(MainActivity.this,android_versions);
        linearLayoutManager = new LinearLayoutManager(this);
        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.setAdapter(itemAdapter);
        recyclerView.setHasFixedSize(true);
        recyclerView.setNestedScrollingEnabled(false);


    }



}

这是 Recyclerview 适配器代码

public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.MyViewHolder> {



    Context mcontext;
    String[] data;
    int counter = 1;

    public ItemAdapter(Context mcontext, String[] data) {
        this.mcontext = mcontext;
        this.data = data;
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(mcontext).inflate(R.layout.itemview, parent, false);
        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
        holder.textView.setText(data[position]);
        if (counter == 1) {
            holder.textView.setBackgroundColor(Color.RED);
            counter = 2;
            holder.textView.setText("1");
        } else if (counter == 2) {
            holder.textView.setBackgroundColor(Color.GREEN);
            counter = 3;
            holder.textView.setText("2");
        } else if (counter == 3) {
            holder.textView.setBackgroundColor(Color.BLUE);
            counter = 1;
            holder.textView.setText("3");
        }
    }



    @Override
    public int getItemCount() {
        return data.length;
    }

    public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView textView;

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);
            textView = itemView.findViewById(R.id.textView);
        }
    }
}

为什么在我滚动项目时会发生这种情况recylerview。请指导我解决这个问题。

谢谢

标签: androidandroid-recyclerview

解决方案


You can't use a variable like counter to get the position of your item's position in RecyclerView. You have to use the position variable provided in the onBindViewHolder() method of have a consistent behavior.

In short, you have to decide how your view should look using the position variable inside onBindViewHolder() method.

If you want to make 1st layout red and text 1 and so on, you can use something like this inside onBindViewHolder():

    int modulus = position % 3;
    switch (modulus){

        case 0:
            //handle logic for red
            break;
        case 1:
            //handle logic for green
            break;
        default:
            //handle logic for blue

    }

推荐阅读