【问题标题】:recyclerview get jerk while I am clicking check box当我单击复选框时,recyclerview 得到了混蛋
【发布时间】:2017-06-19 15:00:38
【问题描述】:

我有一个带有复选框列表项的回收视图。现在我滚动到recyclerview 的末尾并单击ckeckbox。当我单击复选框时,recyclerview 得到混蛋并且列表移动到列表的顶部。

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

@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);
                }
            }
        });

请帮我解决我的问题。

【问题讨论】:

  • 我可以知道投反对票的原因是什么吗??
  • 看看 google io 2017 ui 性能会议,了解如何“de-janking”你的应用程序......我打赌updateStatus
  • 当然。我会检查的。
  • @Selvin.. 我发布了这个问题的答案。

标签: android checkbox android-recyclerview


【解决方案1】:

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

这里发生的问题。

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>

并在复选框背景中设置它。然后问题就解决了。这可能对其他人有帮助。

【讨论】:

    猜你喜欢
    • 2016-08-21
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多