viewHolder.optiontxt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
viewHolder.optiontxt1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.check, 0, 0, 0);
Log.e("position", "onClick: " + i);
}
});
这就是我想要做的 实际上,我在recyclerView中从屏幕上显示数据到屏幕上有6个数组,第一个数组用于问题编号,第二个数组用于问题,其他四个数组用于四个选项。 但是问题是当我选择第一个问题中的一个选项时,八个问题中的一个是自动选择
答案 0 :(得分:0)
recyclerview
回收OnBindViewHolder
中的视图。因此,当单击items
时,它会反映在其他positions
中。
为了更好地了解recyclerview
see this example的选择状态
希望它会对您有所帮助。
答案 1 :(得分:0)
Recyclerview回收其项目视图。在您的情况下,recyclerview在第八个问题中重用第一个问题的视图。可以是任何问题。我们必须使用onBindViewHolder中的更新内容来更新每个itemview。您可以做的是保留答案数组。当用户单击选项时,更新答案数组并致电该位置的notifyitemchanged。在onBindViewHolder中,通过检查答案数组来选择/取消选择选项。这是代码段。
int[] answers = new int[getItemCount()];
@Override
public void onBindViewHolder(ViewHolder viewHolder, int position) {
/* check/uncheck options by checking the answer array */
if(answers[position] == 1) viewHolder.optiontxt1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.check, 0, 0, 0);
else viewHolder.optiontxt1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.uncheck, 0, 0, 0);
if(answers[position] == 2) viewHolder.optiontxt2.setCompoundDrawablesWithIntrinsicBounds(R.drawable.check, 0, 0, 0);
else viewHolder.optiontxt2.setCompoundDrawablesWithIntrinsicBounds(R.drawable.uncheck, 0, 0, 0);
if(answers[position] == 3) viewHolder.optiontxt3.setCompoundDrawablesWithIntrinsicBounds(R.drawable.check, 0, 0, 0);
else viewHolder.optiontxt3.setCompoundDrawablesWithIntrinsicBounds(R.drawable.uncheck, 0, 0, 0);
if(answers[position] == 4) viewHolder.optiontxt4.setCompoundDrawablesWithIntrinsicBounds(R.drawable.check, 0, 0, 0);
else viewHolder.optiontxt4.setCompoundDrawablesWithIntrinsicBounds(R.drawable.uncheck, 0, 0, 0);
viewHolder.optiontxt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
answers[position] = 1;
notifyItemChanged(position);
}
});