我有一个带有复选框列表项的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);
}
}
});
请帮我解决我的问题。
答案 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>
并在复选框背景中设置此项。然后问题是固定的。这可能对其他人有所帮助。