不需要选择回收站查看项目

时间:2019-04-25 10:23:46

标签: java android android-recyclerview

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个数组,第一个数组用于问题编号,第二个数组用于问题,其他四个数组用于四个选项。 但是问题是当我选择第一个问题中的一个选项时,八个问题中的一个是自动选择

2 个答案:

答案 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);
        }
    });