覆盖 Android 中的 setOnCheckedChangeListener
Overriding setOnCheckedChangeListener in Android
我有一组开关组件,大约 30 个。我想重写 setOnCheckedChangeListener
,这样我就可以避免执行几乎相同的事情的不必要的代码。
我知道,onClick 函数是可行的,因此使用多个按钮并更改覆盖函数中的逻辑会更好。
我目前拥有的是:
final Switch question1 = (Switch) findViewById(R.id.question1);
question1.setText(R.string.no);
question1.setChecked(false);
question1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
question1.setText(R.string.yes);
} else {
question1.setText(R.string.no);
}
UpdateScores();
}
});
final Switch question2 = (Switch) findViewById(R.id.question2);
question2.setText(R.string.no);
question2.setChecked(false);
question2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
question2.setText(R.string.yes);
} else {
question2.setText(R.string.no);
}
UpdateScores();
}
});
可以看出,大部分代码都是重复的,我不希望这样。有什么办法可以达到这个目的吗?
OnCheckedChangeListner onchange = new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
buttonView.setText(R.string.yes);
} else {
buttonView.setText(R.string.no);
}
UpdateScores();
}
}
question2.setOnCheckedChangeListener(onchange);
你想要吗?
您可以为所有切换器创建一个 侦听器。
CompoundButton.OnCheckedChangeListener listener = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
buttonView.setText(R.string.yes);
} else {
buttonView.setText(R.string.no);
}
UpdateScores();
}
然后将此侦听器添加到您的切换器:
question1.setOnCheckedChangeListener(listener);
question2.setOnCheckedChangeListener(listener);
....
question30.setOnCheckedChangeListener(listener);
我有一组开关组件,大约 30 个。我想重写 setOnCheckedChangeListener
,这样我就可以避免执行几乎相同的事情的不必要的代码。
我知道,onClick 函数是可行的,因此使用多个按钮并更改覆盖函数中的逻辑会更好。
我目前拥有的是:
final Switch question1 = (Switch) findViewById(R.id.question1);
question1.setText(R.string.no);
question1.setChecked(false);
question1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
question1.setText(R.string.yes);
} else {
question1.setText(R.string.no);
}
UpdateScores();
}
});
final Switch question2 = (Switch) findViewById(R.id.question2);
question2.setText(R.string.no);
question2.setChecked(false);
question2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
question2.setText(R.string.yes);
} else {
question2.setText(R.string.no);
}
UpdateScores();
}
});
可以看出,大部分代码都是重复的,我不希望这样。有什么办法可以达到这个目的吗?
OnCheckedChangeListner onchange = new OnCheckedChangeListener(){
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
buttonView.setText(R.string.yes);
} else {
buttonView.setText(R.string.no);
}
UpdateScores();
}
}
question2.setOnCheckedChangeListener(onchange);
你想要吗?
您可以为所有切换器创建一个 侦听器。
CompoundButton.OnCheckedChangeListener listener = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
if (isChecked) {
buttonView.setText(R.string.yes);
} else {
buttonView.setText(R.string.no);
}
UpdateScores();
}
然后将此侦听器添加到您的切换器:
question1.setOnCheckedChangeListener(listener);
question2.setOnCheckedChangeListener(listener);
....
question30.setOnCheckedChangeListener(listener);