Android滚动后丢失检查状态
每当上下滚动时,我都会丢失复选框的检查状态。Android滚动后丢失检查状态
我解决不了这个问题,两天......
请帮我
这里是我的代码。
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;
}
和细节的解释将是一大乐事给我。
我必须解决这个问题。
感谢您收看我的文章。
滚动时,setOnCheckedChangeListener被调用。因此,要处理,在获取视图,你需要做以下 -
holder.checkbox.setOnCheckedChangeListener(null);
holder.checkbox.setChecked(_songs.get(position).isSelected());
您首先需要设置onchecked空以便在滚动时得到填充视图,您要分配的意见,你不叫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;
}
}
});
谢谢,但它不起作用。我先在onClickListener上设置null,然后设置校验值。之后,我打电话给setOnClickListener。我做对了吗? –
我无法理解机制。每次调用onClickListener时,我都会存储检查值。然后,当再次调用getView时,我将检查值设置为之前存储的值。什么不对? –
我解决了!!!!!!!!!!!!!!!!!非常感谢。如果我没有设置OncheckedChangedListener为null,那么下一个回收的视图会获得以前的检查值?这是设置null的原因吗? –
每当你滚动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;
}
}
});
改变更好!谢谢,但它不能正常工作。问题是什么?? –
你如果和别人都在做同样的事情。所以它变得多余。这不是你问题的原因,只是想让你知道。 if(isChecked){ check_flag_arr [position] = isChecked;其他{ 其中{check_flag_arr [position] = isChecked; } –
感谢您的意见。但我已经知道了。这是为了我的可读性。我原来的代码分别在if和else中有不同的语句。 –
@ Na Jun Yeop查看下面的答案。这应该适合你 –