我有一个列表视图,每行都有一个复选框,可以一次检查许多项目。当我向下滚动列表时,我的复选框会松开状态(也就是说,我无法一次检查所有项目)
我在这里和互联网上阅读了很多帖子。人们说我必须将我的checkedItems存储在我已经尝试过的ArrayList中,但是它没有用。目前,我将检查状态与列表中的所有其他内容存储在一个对象中。
这是我的适配器的代码:
public class GalleryListAdapter extends BaseAdapter {
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
final ViewHolder holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.gallery_list_item, parent, false);
holder = new ViewHolder();
// .. other stuff
holder.chkbox = (CheckBox) convertView.findViewById(R.id.chkbox);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.chkbox.setChecked(documents.get(position).isChecked());
holder.chkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
holder.chkbox.setChecked(holder.chkbox.isChecked() ? true : false);
documents.get(position).setChecked(holder.chkbox.isChecked() ? true : false);
}
}
}
}
向下滚动列表后,我的项目未选中,documents.get(checkedItemPosition).checked
为false
。有谁知道如何解决这一问题?
编辑-解决方案
多亏了评论和答案,我找到了解决问题的方法:
if (convertView == null) {
holder.chkbox = (CheckBox) convertView.findViewById(R.id.chkbox);
convertView.setTag(R.id.chkbox, holder.chkbox);
}
holder.chkbox.setTag(position);
holder.chkbox.setChecked(documents.get(position).isChecked());
holder.chkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
int getPosition = (Integer) buttonView.getTag();
holder.chkbox.setChecked(buttonView.isChecked() ? true : false);
documents.get(getPosition).setChecked(buttonView.isChecked() ? true : false);
}
}
在getView方法中,为复选框持有人设置Tag。
holder.chkbox.setTag(object);
并在onCheckedChanged内部执行此操作
**public onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
Object obj = ( Object)buttonView.getTag();
holder.chkbox.setChecked(obj.isChecked() ? true : false);
documents.get(position).setChecked(obj.isChecked() ? true : false);
}**
这将帮助您摆脱该问题;)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句