【问题标题】:Change selection of radio group whenever a radio button is clicked每当单击单选按钮时更改单选组的选择
【发布时间】:2018-10-27 18:02:24
【问题描述】:

我有一个自定义单选组,里面有两个单选按钮,即使用户单击选中的单选按钮,我想要更改它的选择。

现在它是这样工作的:

如您所见,如果(关闭)被选中并且我单击它,则什么也不会发生。我希望它将选择更改为(打开)。

我尝试像这样使用 OnClickListener:

final RadioButton btn_on = view.findViewById(R.id.on);
    final RadioButton btn_off = view.findViewById(R.id.off);

    final View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {

                if(radio_group.getCheckedRadioButtonId()==R.id.on)
                {
                    radio_group.check(R.id.off);
                }

                if(radio_group.getCheckedRadioButtonId()==R.id.off)
                {
                    radio_group.check(R.id.on);
                }

        }
    };

    btn_on.setOnClickListener(listener);
    btn_off.setOnClickListener(listener);

但它不起作用..还有其他方法吗?

【问题讨论】:

    标签: android radio-button android-radiogroup


    【解决方案1】:

    我相信这应该可行:

    boolean fromClickListener = false;
    boolean fromCheckedChange = false;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        final RadioGroup radio_group = findViewById(R.id.radio_group);
        final RadioButton btn_on = findViewById(R.id.on);
        final RadioButton btn_off = findViewById(R.id.off);
    
        radio_group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                if (fromClickListener)
                    return;
    
                fromCheckedChange = true;
            }
        });
    
    
        final View.OnClickListener listener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (fromCheckedChange) {
                    fromCheckedChange = false;
                    return;
                }
    
                boolean clickedOn = (((RadioButton) v) == btn_on);
    
                fromClickListener = true;
                btn_on.setChecked(!clickedOn);
                btn_off.setChecked(clickedOn);
                fromClickListener = false;
            }
        };
    
        btn_on.setOnClickListener(listener);
        btn_off.setOnClickListener(listener);
    }
    

    【讨论】:

    • 太好了,谢谢!但是我对 OnCheckedChangeListener 中的代码有问题,当它被点击更改时没有触发,所以我不得不在两个侦听器中复制代码,不确定这是否是理想的方式,但它对我有用。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2014-08-30
    • 2021-11-11
    • 1970-01-01
    • 2012-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多