android - 当 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
。请指导我解决这个问题。
谢谢
解决方案
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
}
推荐阅读
- bash - 如何在 Bash 上检查网络驱动器上的文件?
- visual-studio-code - 有没有办法以编程方式切换语法突出显示?
- three.js - 三个JS中是否可以有组属性,例如材料属性?
- python - 在课堂上调用函数对我不起作用
- vba - VBA Word 拆分并使用指定名称保存
- c - 如何在合并排序和插入排序之间进行选择?
- java - Java忽略的类路径中的Bouncy Castle JCA提供程序版本
- stata - 保留特定 ID 的所有记录
- javascript - 变量对象构造函数
- python - pandas pd.options.display.max_rows 未按预期工作