【发布时间】:2011-04-24 05:50:12
【问题描述】:
我有一个 Android ListView,它的项目有一个复选框。
默认情况下选中该复选框。一旦取消选中,它应该从列表中删除。
问题是onCheckedChanged 被触发了两次:当我点击复选框以取消选中它时(使用isChecked false)以及在我删除项目后(使用isChecked true)。
这是我的ArrayAdapter的相关代码:
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.item, parent, false);
holder = new ViewHolder();
holder.check = (CheckBox) convertView.findViewById(R.id.check);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
final Object item = this.getItem(position);
holder.check.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (!isChecked) {
remove(item); // This somehow calls onCheckedChanged again
}
}
});
return convertView;
}
我做错了什么?
【问题讨论】:
-
remove()方法有什么作用,因为它不是ListAdapter上的方法? -
我正在使用 ArrayAdapter。根据Android源码,remove方法将item从数组中移除,并通知数据发生了变化。
标签: android listview checkbox android-arrayadapter