Android 滚动后检查状态丢失
Android lost of check state after scrolling
每当上下滚动时,我都会丢失复选框的选中状态。
我这两天都解决不了这个问题......
请帮帮我
这是我的代码。
public View getView(final int position, View view, ViewGroup parent) {
context = parent.getContext();
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (view == null) {
holder = new ViewHolder();
view = inflater.inflate(R.layout.custom_llistview, parent, false);
holder.img_view = (ImageView) view.findViewById(R.id.custom_imageView);
holder.txt_view = (TextView) view.findViewById(R.id.custom_textView);
holder.checkbox = (CheckBox) view.findViewById(R.id.check_box);
view.setTag(holder);
}
else {
holder = (ViewHolder)view.getTag();
}
holder.checkbox.setChecked(check_flag_arr[position]);
holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
check_flag_arr[position] = isChecked;
else {
check_flag_arr[position] = isChecked;
}
}
});
file_path = list_item.get(position).getFile_path();
Bitmap showImage = BitmapFactory.decodeFile(file_path);
holder.img_view.setImageBitmap(showImage);
list_contents = file_path.substring(45, 65);
holder.txt_view.setText(list_contents);
return view;
}
详细的解释将是我的荣幸。
我必须解决这个问题。
感谢观看我的post。
每当您滚动时调用 setOnCheckedChangeListener
。
删除 setOnCheckedChangeListener
并实施 setOnClickListener
holder.checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (holder.checkbox.isChecked()) {
check_flag_arr[position] = true;
} else {
check_flag_arr[position] = false;
}
}
});
滚动时调用 setOnCheckedChangeListener。因此,要在获取视图中处理该问题,您需要执行以下操作 -
holder.checkbox.setOnCheckedChangeListener(null);
holder.checkbox.setChecked(_songs.get(position).isSelected());
您首先需要设置 onchecked null,以便在填充视图和分配视图时在滚动时不调用 onCheckedListener。
然后你需要调用OnCheckedChangeListener
holder.checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (holder.checkbox.isChecked()) {
check_flag_arr[position] = true;
} else {
check_flag_arr[position] = false;
}
}
});
每当上下滚动时,我都会丢失复选框的选中状态。
我这两天都解决不了这个问题......
请帮帮我
这是我的代码。
public View getView(final int position, View view, ViewGroup parent) {
context = parent.getContext();
inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (view == null) {
holder = new ViewHolder();
view = inflater.inflate(R.layout.custom_llistview, parent, false);
holder.img_view = (ImageView) view.findViewById(R.id.custom_imageView);
holder.txt_view = (TextView) view.findViewById(R.id.custom_textView);
holder.checkbox = (CheckBox) view.findViewById(R.id.check_box);
view.setTag(holder);
}
else {
holder = (ViewHolder)view.getTag();
}
holder.checkbox.setChecked(check_flag_arr[position]);
holder.checkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
check_flag_arr[position] = isChecked;
else {
check_flag_arr[position] = isChecked;
}
}
});
file_path = list_item.get(position).getFile_path();
Bitmap showImage = BitmapFactory.decodeFile(file_path);
holder.img_view.setImageBitmap(showImage);
list_contents = file_path.substring(45, 65);
holder.txt_view.setText(list_contents);
return view;
}
详细的解释将是我的荣幸。
我必须解决这个问题。
感谢观看我的post。
每当您滚动时调用 setOnCheckedChangeListener
。
删除 setOnCheckedChangeListener
并实施 setOnClickListener
holder.checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (holder.checkbox.isChecked()) {
check_flag_arr[position] = true;
} else {
check_flag_arr[position] = false;
}
}
});
滚动时调用 setOnCheckedChangeListener。因此,要在获取视图中处理该问题,您需要执行以下操作 -
holder.checkbox.setOnCheckedChangeListener(null);
holder.checkbox.setChecked(_songs.get(position).isSelected());
您首先需要设置 onchecked null,以便在填充视图和分配视图时在滚动时不调用 onCheckedListener。
然后你需要调用OnCheckedChangeListener
holder.checkbox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (holder.checkbox.isChecked()) {
check_flag_arr[position] = true;
} else {
check_flag_arr[position] = false;
}
}
});