android – CheckBox更改值两次

前端之家收集整理的这篇文章主要介绍了android – CheckBox更改值两次前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个 Android ListView,其项目有一个复选框.

默认情况下会选中该复选框.取消选中后,应将其从列表中删除.

问题是onCheckedChanged被触发两次:当我点击复选框取消选中它(使用isChecked false)并在我删除项目后(isChecked为true).

这是我的ArrayAdapter的相关代码

  1. public View getView(final int position,View convertView,ViewGroup parent) {
  2. ViewHolder holder;
  3. if (convertView == null) {
  4. convertView = mInflater.inflate(R.layout.item,parent,false);
  5. holder = new ViewHolder();
  6. holder.check = (CheckBox) convertView.findViewById(R.id.check);
  7. convertView.setTag(holder);
  8. } else {
  9. holder = (ViewHolder) convertView.getTag();
  10. }
  11. final Object item = this.getItem(position);
  12. holder.check.setOnCheckedChangeListener(new CheckBox.OnCheckedChangeListener() {
  13. @Override
  14. public void onCheckedChanged(CompoundButton buttonView,boolean isChecked) {
  15. if (!isChecked) {
  16. remove(item); // This somehow calls onCheckedChanged again
  17. }
  18. }
  19. });
  20. return convertView;
  21. }

我究竟做错了什么?

解决方法

我遇到了同样的问题,它似乎是一个Android错误,这两次执行onCheckChanged方法.

我的解决方案:实现onClickListener,而不是onCheckedChangedListener.

像这样的东西:

  1. private final class CheckUpdateListener implements OnClickListener {
  2.  
  3. private Group parent;
  4. private boolean isChecked;
  5.  
  6. private CheckUpdateListener(Group parent) {
  7.  
  8. this.parent = parent;
  9.  
  10. }
  11.  
  12. @Override
  13. public void onClick(View Box) {
  14. this.isChecked = !parent.isChecked();
  15.  
  16. parent.setChecked(isChecked);
  17.  
  18. notifyDataSetChanged();
  19.  
  20. }
  21.  
  22. }

猜你在找的Android相关文章