选择/取消选择Listview中的所有项目

时间:2014-04-21 22:21:23

标签: android

我在我的应用程序中使用多选列表视图。具体来说就是simple_list_item_activated_1。

我有一些代码,一个按钮,将选择所有listview项目。我有一些逻辑说,如果已经选择了所有项目,则取消选择所有项目。

第一次按下按钮时,它将按预期选择列表中的所有项目。当我第二次按下按钮时,它会按预期取消选择所有项目。

这是我的问题: 当我第三次按下按钮时,“selectedCount”仍然等于“childCount”。显然我的代码永远不会进入If语句。

有谁知道为什么会这样?或者也许有更好的方法来实现我想要实现的目标?

  int childCount = officerList.getChildCount();
  int selectedCount = officerList.getCheckedItemPositions().size();

            if(childCount != selectedCount){
                for (int i = 0; i < officerList.getChildCount(); i++) {
                    officerList.setItemChecked(i, true);
                }
            }else{
                for (int i = 0; i < officerList.getChildCount(); i++) {
                    officerList.setItemChecked(i, false);
                }
            }
        }

2 个答案:

答案 0 :(得分:0)

尝试这个逻辑,如果没有检查任何项目,它将检查所有项目,否则将只检查未选中的项目,反之亦然。

public void onClick(View v) {
       SparseBooleanArray sparseBooleanArray = officerList.getCheckedItemPositions();
       if(sparseBooleanArray != null && sparseBooleanArray.size() >0) {
            for (int index = 0; index < sparseBooleanArray.size(); index++) {
                if(sparseBooleanArray.valueAt(index)){
                        officerList.setItemChecked(sparseBooleanArray.keyAt(index),true);
                    }
                    else {
                        officerList.setItemChecked(sparseBooleanArray.keyAt(index),false);
                    }
                }
            }
            else {
                for (int index = 0; index < officerList.getCount(); index++) {
                    officerList.setItemChecked(index,true);
                }
            }
        }

答案 1 :(得分:0)

我设法回答了我自己的问题。使用getCheckItemPositions()。size()是实现我想要的不可靠的方法。

这将返回所有已检查项目的sparseBooleanArray(),因此第一次正常工作时,没有选择任何内容,因此它将返回0.然后一旦选中所有内容,sparseBooleanArray将等于所有项目中的所有项目。列表,因为他们都被选中。

然而,据我所知,spareBooleanArray是一个存储位置的数组,如果选择了它,则是一个布尔标志。在我按下第三个选择全部按钮的情况下,数组的大小仍然等于列表项的数量。

我如何修复我的问题,就是使用getCheckedItemCount(),它只返回我原来想要的所选项目的数量。希望这个答案可以帮助别人。

 int childCount = officerList.getChildCount();
 int selectedCount = officerList.getCheckedItemCount();

        if(childCount != selectedCount){
            for (int i = 0; i < officerList.getChildCount(); i++) {
                officerList.setItemChecked(i, true);
            }
        }else{
            for (int i = 0; i < officerList.getChildCount(); i++) {
                officerList.setItemChecked(i, false);
            }
        }
    }