我有一个
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;
- }
我究竟做错了什么?
解决方法
我遇到了同样的问题,它似乎是一个Android错误,这两次执行onCheckChanged方法.
我的解决方案:实现onClickListener,而不是onCheckedChangedListener.
像这样的东西:
- private final class CheckUpdateListener implements OnClickListener {
- private Group parent;
- private boolean isChecked;
- private CheckUpdateListener(Group parent) {
- this.parent = parent;
- }
- @Override
- public void onClick(View Box) {
- this.isChecked = !parent.isChecked();
- parent.setChecked(isChecked);
- notifyDataSetChanged();
- }
- }