Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android有多个复选框想要检查它是否第一次被点击_Android_Checkbox_Boolean Logic - Fatal编程技术网

Android有多个复选框想要检查它是否第一次被点击

Android有多个复选框想要检查它是否第一次被点击,android,checkbox,boolean-logic,Android,Checkbox,Boolean Logic,我有一堆复选框,每个复选框都有相同的方法。我想做的是,如果某个复选框是第一次选中的,那么就要有一个复选框。发生的事情是,我认为计数器仍在上升,即使复选框未被选中,但其他复选框已被选中。因此,我试图让复选框从红色变为黄色再变为绿色(它以红色开始),但当选中其中一个复选框时,它会变为黄色,这正是我想要的,但如果我尝试选中另一个复选框,它将变为绿色而不是黄色。我尝试使用布尔值,但我不确定如何让它知道是否第一次选中了该复选框并将计数器设置为0。如果我在onClick方法中将计数器设置为0,它将保持为0。

我有一堆复选框,每个复选框都有相同的方法。我想做的是,如果某个复选框是第一次选中的,那么就要有一个复选框。发生的事情是,我认为计数器仍在上升,即使复选框未被选中,但其他复选框已被选中。因此,我试图让复选框从红色变为黄色再变为绿色(它以红色开始),但当选中其中一个复选框时,它会变为黄色,这正是我想要的,但如果我尝试选中另一个复选框,它将变为绿色而不是黄色。我尝试使用布尔值,但我不确定如何让它知道是否第一次选中了该复选框并将计数器设置为0。如果我在onClick方法中将计数器设置为0,它将保持为0。因此,我想知道是否有办法知道是否第一次选中了复选框并将其设置为0。我希望我的代码效率高,并且每个复选框都没有单独的计数器。我试过研究这个问题,但找不到任何帮助。任何帮助都将不胜感激。谢谢

public void checked(CheckBox checkBox){
    if (checkBox.isChecked()){
        count++;
    } else if (!checkBox.isChecked()){
        checkBox.setChecked(true);
        count++;
    }
    if (count == 1){
        checkBox.setButtonDrawable(R.drawable.custom_yellow_checkbox);
    }
    if (count == 2){
        checkBox.setButtonDrawable(R.drawable.custom_green_checkbox);
    }
    if (count > 2){
        count = 0;
        checkBox.setButtonDrawable(R.drawable.custom_red_checkbox);
    }
}


chkDownload.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            checked(chkDownload);
        }
    });

chkGetCalendar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            checked(chkGetCalendar);
        }
    });

chkStart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            checked(chkStart);
        }
    });
您可以做的是:

int downloadCount = 0;
int calendarCount = 0;
int startCount = 0;

public void checked(CheckBox checkBox,int count){
    if (checkBox.isChecked()){
        count++;
    } else if (!checkBox.isChecked()){
        checkBox.setChecked(true);
        count++;
    }
    if (count == 1){
        checkBox.setButtonDrawable(R.drawable.custom_yellow_checkbox);
    }
    if (count == 2){
        checkBox.setButtonDrawable(R.drawable.custom_green_checkbox);
    }
    if (count > 2){
        count = 0;
        checkBox.setButtonDrawable(R.drawable.custom_red_checkbox);
    }
}


chkDownload.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            checked(chkDownload,downloadCount);
        }
    });

chkGetCalendar.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            checked(chkGetCalendar,calendarCount);
        }
    });

chkStart.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            checked(chkStart,startCount);
        }
    });
编辑

然后,您可以做的是返回计数,以便它保留它

例如:

我不确定您的代码是什么样子的,但我刚刚构建了这个,它可以工作:


每个复选框都需要一个计数器。发生的情况是,当您单击
chkDownload
时,
count
会增加,如果按
chkStart
会再次增加,是否有办法在方法中选中计数器(复选框,int counter),并在该参数中选中单个计数器(chkStart,count1);已检查(chkDownload,count2);?我不想把checked方法中的内容放在每个复选框中,因为我觉得这不是很有效。检查我的答案,如果这是您想要的,我以前尝试过,并且复选框不会变为绿色,因为count从未初始化。那是我的问题。您认为有没有一种方法可以在用户每次单击复选框时都不初始化它的情况下对其进行初始化?第二次单击时仍然没有变为绿色。它还是黄色的。我认为它必须以某种方式初始化。我确实将checked方法中的返回类型更改为int,这样它就可以工作并且不会出现错误,但仍然不能工作。对不起。@Karna你的代码在哪里?是在活动中吗?碎片?检查我的编辑。我已经创建了一个带有1个活动的测试应用程序,它通过更改图片来工作。非常好!非常感谢!
public int checked(CheckBox checkBox,int count){
    if (checkBox.isChecked()){
        count++;
    } else if (!checkBox.isChecked()){
        checkBox.setChecked(true);
        count++;
    }
    if (count == 1){
        checkBox.setButtonDrawable(R.drawable.custom_yellow_checkbox);
    }
    if (count == 2){
        checkBox.setButtonDrawable(R.drawable.custom_green_checkbox);
    }
    if (count > 2){
        count = 0;
        checkBox.setButtonDrawable(R.drawable.custom_red_checkbox);
    }
    return count;
}

chkDownload.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        downloadCount = checked(chkDownload,downloadCount);
    }
});
public class MainActivity extends AppCompatActivity {

    int downloadCount = 0;
    int calendarCount = 0;
    int startCount = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final CheckBox chkDownload = (CheckBox) findViewById(R.id.chkDownload);
        final CheckBox chkGetCalendar = (CheckBox) findViewById(R.id.chkGetCalendar);
        final CheckBox chkStart = (CheckBox) findViewById(R.id.chkStart);

        chkDownload.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                downloadCount = checked(chkDownload, downloadCount);
            }
        });

        chkGetCalendar.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                calendarCount = checked(chkGetCalendar, calendarCount);
            }
        });

        chkStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startCount = checked(chkStart, startCount);
            }
        });

    }

    public int checked(CheckBox checkBox, int count) {

        if (checkBox.isChecked()) {

            count++;

        } else if (!checkBox.isChecked()) {

            checkBox.setChecked(true);
            count++;

        }

        if (count == 1) {
            checkBox.setButtonDrawable(R.drawable.ic_menu_camera);
        }
        if (count == 2) {
            checkBox.setButtonDrawable(R.drawable.ic_menu_gallery);
        }
        if (count > 2) {
            count = 0;
            checkBox.setButtonDrawable(R.drawable.ic_menu_manage);
        }
        return count;
    }

}