我点击复选框时,recyclerview得到混蛋

时间:2017-05-22 09:38:01

标签: android checkbox android-recyclerview

我有一个带有复选框列表项的recyclerview。现在我滚动到recyclerview的结尾并单击ckeckbox。当我单击复选框recyclelerview时,将jerk和list移到列表的顶部。

在这里,我发布了适配器代码供您查看。

@Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        holder.mChkEquipments.setOnCheckedChangeListener(null);
        holder.txt_equiment_number.setVisibility(View.INVISIBLE);
        holder.divider.setVisibility(View.INVISIBLE);
        if(position==0){
            holder.txt_equiment_number.setVisibility(View.VISIBLE);
            holder.text_hookEqmnt.setText(mArrayList.get(position).getInspectionName());
            holder.divider.setVisibility(View.VISIBLE);
            holder.txt_equiment_number.setText(mEquipmentNumber);
        }else{
            holder.text_hookEqmnt.setText(mArrayList.get(position).getInspectionName());
        }
        holder.text_hookEqmnt.setText(mArrayList.get(position).getInspectionName());
        holder.txt_equiment_number.setText(mEquipmentNumber);
        holder.mChkEquipments.setChecked(mArrayList.get(position).getInspectionStatus());
        if(mArrayList.get(position).getInspectionStatus()){
            holder.mChkEquipments.setButtonDrawable(R.drawable.route_check);
        }else{
            holder.mChkEquipments.setButtonDrawable(R.drawable.route_close);
        }

        holder.mChkEquipments.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
                /*holder.mChkEquipments.setChecked(isChecked);
                mArrayList.get(position).setInspectionStatus(isChecked);
                updateStatus(mArrayList.get(position).getId(),isChecked);
                if(isChecked){
                    holder.mChkEquipments.setButtonDrawable(R.drawable.route_check);
                }else{
                    holder.mChkEquipments.setButtonDrawable(R.drawable.route_close);
                }*/
            }
        });

        if (position % 2 != 0) {
            holder.mVIew.setBackgroundResource(R.color.list_alternative_bg);
        } else {
            holder.mVIew.setBackgroundResource(R.color.white);
        }
    }

我也试过OnClickListener。但我面临同样的问题。

holder.mChkEquipments.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                final boolean isChecked = holder.mChkEquipments.isChecked();
                holder.mChkEquipments.setChecked(isChecked);
                mArrayList.get(position).setInspectionStatus(isChecked);
                updateStatus(mArrayList.get(position).getId(),isChecked);
                if(isChecked){
                    holder.mChkEquipments.setButtonDrawable(R.drawable.route_check);
                }else{
                    holder.mChkEquipments.setButtonDrawable(R.drawable.route_close);
                }
            }
        });

请帮我解决我的问题。

1 个答案:

答案 0 :(得分:0)

问题是在单击复选框时更改图像。

这里发生的问题。

if(isChecked){
    holder.mChkEquipments.setButtonDrawable(R.drawable.route_check);
   }else{
        holder.mChkEquipments.setButtonDrawable(R.drawable.route_close);
   }

为了避免这个问题,我改变了xml中的图像而不是java类。

我在drawable文件夹中创建了xml并使用以下代码。

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="false"
        android:drawable="@drawable/route_close" />
    <item android:state_checked="true"
        android:drawable="@drawable/route_check" />
</selector>

并在复选框背景中设置此项。然后问题是固定的。这可能对其他人有所帮助。