选中多个复选框后,如何禁用复选框?

时间:2017-03-03 14:38:25

标签: android android-studio checkbox

我有10个复选框,我想在选中最多6个复选框后禁用剩余的复选框。

如何使用OnCheckChangedListener来解决问题。

如果我编写如下代码,我需要重复10次

checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener() {

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if (isChecked && numberOfCheckboxesChecked >= 6) {
        checkbox1.setChecked(false);
    } else {
    }
}};

如何减少冗余代码?

1 个答案:

答案 0 :(得分:0)

您可以创建一个命名类而不是匿名类:

checkbox1.setOnCheckedChangeListener(new MyCheckboxChangeListener());
checkbox2.setOnCheckedChangeListener(new MyCheckboxChangeListener());
...

private static class MyCheckboxChangeListener implements OnCheckedChangeListener {

    private static int numberOfCheckboxesChecked;

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked) {
            if (numberOfCheckboxesChecked >= 6) {
                buttonView.setChecked(false);
            } else {
                numberOfCheckboxesChecked++;
            }
        } else {
            numberOfCheckboxesChecked--;            
        }
    }
}

或者您可以在Activity中实现该接口:

public class MainActivity extends AppCompatActivity implements OnCheckedChangeListener {

    ...
    private int numberOfCheckboxesChecked;
    ...

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ...
        checkbox1.setOnCheckedChangeListener(this);
        checkbox2.setOnCheckedChangeListener(this);
    }

    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (isChecked) {
            if (numberOfCheckboxesChecked >= 6) {
                buttonView.setChecked(false);
            } else {
                numberOfCheckboxesChecked++;
            }
        } else {
            numberOfCheckboxesChecked--;            
        }
    }

}