我有10个复选框,我想在选中最多6个复选框后禁用剩余的复选框。
如何使用OnCheckChangedListener
来解决问题。
如果我编写如下代码,我需要重复10次
checkbox1.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked && numberOfCheckboxesChecked >= 6) {
checkbox1.setChecked(false);
} else {
}
}};
如何减少冗余代码?
答案 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--;
}
}
}