【发布时间】:2014-04-22 08:20:25
【问题描述】:
我有一个列表视图,每行都有一个复选框,可以一次检查多个项目。当我向下滚动列表时,我的复选框会失去状态(这意味着我不能一次检查所有项目)
我在这里和互联网上阅读了很多帖子。人们说我必须将我的checkedItems 存储在我已经尝试过但没有用的“ArrayList”中。目前,我将选中的状态与列表中的所有其他内容一起存储在一个对象中。
这是我的 Adapter` 的代码:
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。有谁知道如何解决这个问题?
编辑 - 解决方案
感谢 cmets 和答案,我找到了解决问题的方法:
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);
}
}
【问题讨论】:
-
检查这个stackoverflow.com/questions/18162931/…。它的 bcoz listview 回收视图
-
最后一条评论对解决我的问题帮助很大。谢谢!
标签: android listview checkbox android-listview android-adapterview