覆盖 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);