在Android中如何在两个组之间切换?

在Android中如何在两个组之间切换?,android,Android,我有两个单选组,每个单选组包含两个单选按钮。我正在尝试在这两组之间切换,但迄今为止没有成功。任何帮助都将不胜感激 请在此处查看API: 编辑: 不满意花了多长时间,但我明白了。结果表明,当组已清除时,onCheckedChanged只通过checkedId的-1。如果一个框刚刚被取消选中,它的ID仍然被传递 您可以这样做: myGroup2.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){

我有两个单选组,每个单选组包含两个单选按钮。我正在尝试在这两组之间切换,但迄今为止没有成功。任何帮助都将不胜感激

请在此处查看API:

编辑:

不满意花了多长时间,但我明白了。结果表明,当组已清除时,onCheckedChanged只通过checkedId的-1。如果一个框刚刚被取消选中,它的ID仍然被传递

您可以这样做:

    myGroup2.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            if(checkedId != -1 &&
                ((RadioButton) findViewById(checkedId)).isChecked()){
                myGroup3.clearCheck();
            }
        }
    });
    myGroup3.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
                if(checkedId != -1 &&
                        ((RadioButton) findViewById(checkedId)).isChecked()){
                    myGroup2.clearCheck();
                }
        }
    });
或者,可能更明智一点,让活动实现监听器,这一部分在onCreate方法之外:

@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
    if(checkedId != -1 && ((RadioButton) findViewById(checkedId)).isChecked()){
        if(group == myGroup2){
            myGroup3.clearCheck();
        }
        else if(group == myGroup3){
            myGroup2.clearCheck();
        }
        // And your switch for whatever you want to happen based on the
        // selected button goes here
    }
}
请在此处查看API:

编辑:

不满意花了多长时间,但我明白了。结果表明,当组已清除时,onCheckedChanged只通过checkedId的-1。如果一个框刚刚被取消选中,它的ID仍然被传递

您可以这样做:

    myGroup2.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            if(checkedId != -1 &&
                ((RadioButton) findViewById(checkedId)).isChecked()){
                myGroup3.clearCheck();
            }
        }
    });
    myGroup3.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener(){
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
                if(checkedId != -1 &&
                        ((RadioButton) findViewById(checkedId)).isChecked()){
                    myGroup2.clearCheck();
                }
        }
    });
或者,可能更明智一点,让活动实现监听器,这一部分在onCreate方法之外:

@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
    if(checkedId != -1 && ((RadioButton) findViewById(checkedId)).isChecked()){
        if(group == myGroup2){
            myGroup3.clearCheck();
        }
        else if(group == myGroup3){
            myGroup2.clearCheck();
        }
        // And your switch for whatever you want to happen based on the
        // selected button goes here
    }
}

这是我想出的解决办法

radioGroup1 = (RadioGroup) findViewById(R.id.radioGroup1);
    radioGroup2 = (RadioGroup) findViewById(R.id.radioGroup2);
    RadioButton[] tempradbutton1 = {
            (RadioButton) findViewById(R.id.radio1),
            (RadioButton) findViewById(R.id.radio2) };
    RadioButton[] tempradbutton2 = {
            (RadioButton) findViewById(R.id.radio4),
            (RadioButton) findViewById(R.id.radio5) };
    radbutton1 = tempradbutton1;
    radbutton2 = tempradbutton2;
    for (int i = 0; i < radbutton1.length; i++) {
        radbutton1[i].setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                radioGroup2.clearCheck();
            }
        });
        radbutton2[i].setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                radioGroup1.clearCheck();

            }
        });
    }
对radiogroup上存在的每个单选按钮使用onClickListener,而不是使用setOnCheckedChangeListener

XML:


这是我想出的解决办法

radioGroup1 = (RadioGroup) findViewById(R.id.radioGroup1);
    radioGroup2 = (RadioGroup) findViewById(R.id.radioGroup2);
    RadioButton[] tempradbutton1 = {
            (RadioButton) findViewById(R.id.radio1),
            (RadioButton) findViewById(R.id.radio2) };
    RadioButton[] tempradbutton2 = {
            (RadioButton) findViewById(R.id.radio4),
            (RadioButton) findViewById(R.id.radio5) };
    radbutton1 = tempradbutton1;
    radbutton2 = tempradbutton2;
    for (int i = 0; i < radbutton1.length; i++) {
        radbutton1[i].setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                radioGroup2.clearCheck();
            }
        });
        radbutton2[i].setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                radioGroup1.clearCheck();

            }
        });
    }
对radiogroup上存在的每个单选按钮使用onClickListener,而不是使用setOnCheckedChangeListener

XML:



你能详细说明你想要达到的目标吗?如果您想在选中另一个组中的一个按钮时取消选中该组,则上述操作将不起作用。它将调用clearCheck;在两个组中。嗨,人类,是的,这正是我想要实现的,当一个组中的一个按钮被选中时,另一个组中的一个按钮被取消选中。你想要实现什么?与其有两个单选组,为什么不加上所有单选按钮呢?嗨,Christian,我有两行RadioGroup,实现两行布局的唯一方法是使用两个RadioGroup,这就是我正在做的。我猜@user想要一个网格中的RadioGroup,这对了,否则是不可能的。你能详细说明你想要达到的目标吗?如果您想在选中另一个组中的一个按钮时取消选中该组,则上述操作将不起作用。它将调用clearCheck;在两个组中。嗨,人类,是的,这正是我想要实现的,当一个组中的一个按钮被选中时,另一个组中的一个按钮被取消选中。你想要实现什么?与其有两个单选组,为什么不加上所有的单选按钮呢?嗨,Christian,我有两行的RadioGroup,实现两行布局的唯一方法是使用两个RadioGroup,这就是我正在做的。我猜@user想要网格中的RadioGroup,这在其他情况下是不可能的。嗨,我确实尝试了上述方法,但没有正确工作;当你点击第一组时,被选中,但当点击第二组时,一切都被清除,因此你必须点击第二组两次才能被选中…我也为第三组编写了相同的代码..我点击了,一切都正常。我怀疑的是可能不应该在里面:protectedvoid onCreateBundle savedInstanceState{…再次不确定…我确定所有这些都有解决方案。我正在考虑一个切换,如果它可以为两个听众实现的话…最后你成功了,并且工作得很好,再次感谢!:是的,伙计,我不知道如何给你更多的分数?我很接近你的解决方案,但没有像你那样一针见血是的!有时我的大脑会在花太多时间在某件事情上而没有进入解决方案时停止。你好,我确实尝试了上述方法,但没有正常工作;当你单击第一组时,被选中,但当单击第二组时,所有内容都被清除,因此你必须单击第二组两次才能被选中…我没有组3的代码也一样。我检查过了,一切都正常。我怀疑的是,可能不应该在里面:protectedvoid onCreateBundle savedInstanceState{…再次不确定…我确定所有这些都有解决方案。我正在考虑一个切换,如果它可以为两个听众实现的话…最后你成功了,并且工作得很好,再次感谢!:是的,伙计,我不知道如何给你更多的分数?我很接近你的解决方案,但没有像你那样一针见血是的!有时我的大脑会在花太多时间在某件事情上而没有进入解决方案时停止。嗨,Christian。谢谢你的解决方案,但我想知道你从哪里得到了radio0和radio3,因为我没有超过4个按钮,每组2个,它们是添加的还是隐藏的RadioButton?radio0和radio3是在RadioRou中添加的XML中的p。如果您只有2个按钮,只需删除上面代码中的radio0和radio3。我已添加了XML。我希望它能有所帮助。嗨,Christian。感谢您的解决方案,但尝试找出从何处获得radio0和radio3,因为我没有超过4个按钮,每个组中有2个
ups,它们是添加的还是隐藏的单选按钮?radio0和radio3添加在XML中的radiogroup内。如果您只有2个按钮,只需删除上面代码中的radio0和radio3。我已经添加了xml。我希望这有帮助。