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

Android multiple checkboxes wanting to check if it is clicked the first time

我有一堆复选框,每个复选框都有相同的方法。我想要做的是在第一次选中该特定复选框时有一个复选框。发生的事情是我认为即使未选中复选框但其他复选框已选中,计数器仍在上升。所以,我试图让复选框从红色变为黄色再变为绿色(开始时为红色),但是当其中一个复选框被选中时,它会变成黄色,这正是我想要的,但是如果我尝试选中另一个复选框,它会变成绿色而不是黄色。我尝试使用布尔值,但我不确定如何让它知道是否第一次选中了该特定复选框并将计数器设置为 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);
        }
    });

编辑

然后您可以做的是 return 计数,以便保留它。

例如:

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

I'm not sure what your code looks like but I just built this and it works:

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

}