尝试选中所有/清除所有按钮选中并取消选中复选框

时间:2017-11-04 10:23:37

标签: java android checkbox onclicklistener

我有一个显示Select All的按钮。点击后,我的check boxes中的所有listview都应该被检查。相同的按钮将文本更改为Clear All。单击后,所有复选框都将取消选中,文本将返回Select All ....

然而,在我的listview中,每隔一个按钮就会被选中或取消选中。

点击Select All后,checkbox 135会被检查。 Checkbox 24取消选中。文字转为Clear All

点击Clear All后,checkbox 135将取消选中。我会检查Checkbox 24。文字转为Select All

我看不出我的代码有什么问题。或者它可能是我的应用程序的另一部分,但没有错误或警告,不知道从哪里开始调试。感谢。

   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 个答案:

答案 0 :(得分:1)

我认为问题可能在这里:

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位于一个循环中,所以它在每个循环中作为swich turin开启和关闭。

在每个循环中,文本&#34;全选&#34; /&#34;全部清除&#34;将改变,所以将在下一个循环中评估按钮状态。

答案 1 :(得分:1)

for循环中的条件一直在改变truefalse,因为第一个循环更改Text,第二个循环再次更改它,并且它在此部分继续更改(阅读评论!):

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");

<强> SOLUTION:

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);
    }}
});