代码之家  ›  专栏  ›  技术社区  ›  CHarris

尝试使我的全选/清除所有按钮选中和取消选中复选框

  •  0
  • CHarris  · 技术社区  · 7 年前

    我有一个按钮,上面写着 Select All . 单击所有 check boxes 在我的 listview 应进行检查。同一按钮将文本更改为 Clear All . 单击时,所有复选框都应取消选中,文本返回到 全选 ....

    列表视图 然而,每秒钟按钮都会被选中或取消选中。

    什么时候 全选 单击, checkbox 1 , 3 5 检查。 Checkbox 2 4 未经检查。文本变为 全部清除 .

    什么时候 全部清除 单击, 复选框1 , 3. 5. 未经检查。 复选框2 4. 检查。文本变为 全选 .

    我看不出我的代码有什么问题。或者可能是我应用程序的另一部分中的某个内容,但没有错误或警告,也不确定从哪里开始调试。谢谢

       btnCheckAll.setOnClickListener(new View.OnClickListener() {
    
            public void onClick(View v) {
                int count = MatchingContactsAsArrayList.size();
                for (int i = 0; i < count; i++) {
                LinearLayout itemLayout = (LinearLayout) listView.getChildAt(i); // Find by under LinearLayout
                CheckBox checkbox = (CheckBox) itemLayout.findViewById(R.id.checkBoxContact);
    
    
                if(btnCheckAll.getText().toString().equalsIgnoreCase("Select All")) {
                    checkbox.setChecked(true);
                    btnCheckAll.setText("Clear All");
                }
    
    
                    else if (btnCheckAll.getText().toString().equalsIgnoreCase("Clear All")){
                            checkbox.setChecked(false);
                    btnCheckAll.setText("Select All");
    
    
                }}}});
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Xenolion ariochdivij666    7 年前

    for循环内的条件从 true false 因为第一个循环改变了文本,第二个循环再次改变了文本,并且在这一部分中不断变化( 阅读评论! ):

    if(btnCheckAll.getText().toString().equalsIgnoreCase("Select All")) {//This condition will be true on first round and 3 and 5 and 7...
                checkbox.setChecked(true);
                btnCheckAll.setText("Clear All");
            }
    
    
                else if (btnCheckAll.getText().toString().equalsIgnoreCase("Clear All")){//And this one will be true in 2 and 4 and 6...
                        checkbox.setChecked(false);
                btnCheckAll.setText("Select All");
    

    解决方案:

    btnCheckAll.setOnClickListener(new View.OnClickListener() {
    
        public void onClick(View v) {
            boolean toCheck=true;
    
            //THE CONDITION SHOULD BE OUTSIDE THE LOOP!
    
     if(btnCheckAll.getText().toString().equalsIgnoreCase("Select All")) {
                toCheck=true;
                btnCheckAll.setText("Clear All");
            }
    
    
                else if (btnCheckAll.getText().toString().equalsIgnoreCase("Clear All")){
                        toCheck=false;
                btnCheckAll.setText("Select All");
    
    
            }
    
    
    
            int count = MatchingContactsAsArrayList.size();
            for (int i = 0; i < count; i++) {
            LinearLayout itemLayout = (LinearLayout) listView.getChildAt(i); // Find by under LinearLayout
            CheckBox checkbox = (CheckBox) itemLayout.findViewById(R.id.checkBoxContact);
            checkbox.setChecked(toCheck);
        }}
    });
    
        2
  •  1
  •   Juan    7 年前

    我认为问题可能在这里:

    if(btnCheckAll.getText().toString().equalsIgnoreCase("Select All")) {
                    checkbox.setChecked(true);
                    btnCheckAll.setText("Clear All");
    }else if (btnCheckAll.getText().toString().equalsIgnoreCase("Clear All")){
                            checkbox.setChecked(false);
                    btnCheckAll.setText("Select All");
    }
    

    if

    在每个循环中,文本“全选”/“全部清除”将发生变化,因此将在下一个循环中评估按钮状态。