Android RadioGroup多行显示,解决单选问

导语

如下图所示,这是一个导航选择弹框。进行单项选择,然后会监听回调选择的事件。问题是Android的RadioButton是一般是放在RadioGroup中进行管理的,而RadioGroup又是线性布局,即单行有效,多行无效。如图那种就需要两个RadioGroup来进行合作。那么如果进行合作呢?

Android RadioGroup多行显示,解决单选问_第1张图片

分析:RadioGroup多行显示其实就是两个RadioGroup进行切换,使用RadioGroup的clearCheck()方法进行操作。

但是在使用clearCheck()之前,如果RadioGroup已经设置过监听,执行就会报StackOveflowError错误。

正确方法如下:

先调用

setOnCheckedChangeListener(null)

再调用

clearCheck()然后重新setOnCheckedChangeListener(checkedListener)。


案例代码

1、布局如下:

                  

                        

                        

                        
                    
                 

                    

                    

                    
                

 

2、具体操作如下:

声明控件: 


    @InjectView(R.id.rg_manhole_state_one)
    RadioGroup rgManholeStateOne;
    @InjectView(R.id.rg_manhole_state_two)
    RadioGroup rgManholeStateTwo;

设置监听:

       rgManholeStateOne.setOnCheckedChangeListener(new OnMyManholeStateOneCheckedChangeListener());
        rgManholeStateTwo.setOnCheckedChangeListener(new OnMyManholeStateTwoCheckedChangeListener());

实现单选

    private class OnMyManholeStateOneCheckedChangeListener implements RadioGroup.OnCheckedChangeListener {

        @Override
        public void onCheckedChanged(RadioGroup radioGroup, int position) {
            switch (position) {
                case R.id.rb_intact:
                    if (rbIntact.isChecked())
                        rgManholeStateTwo.clearCheck();
                    break;
                case R.id.rb_lose:
                    if (rbLose.isChecked())
                        rgManholeStateTwo.clearCheck();
                    break;
                case R.id.rb_sunken:
                    if (rbSunken.isChecked())
                        rgManholeStateTwo.clearCheck();
                    break;
            }
        }
    }

    private class OnMyManholeStateTwoCheckedChangeListener implements RadioGroup.OnCheckedChangeListener {

        @Override
        public void onCheckedChanged(RadioGroup radioGroup, int position) {

            switch (position) {
                case R.id.rb_occupation:
                    if (rbOccupation.isChecked())
                        rgManholeStateOne.clearCheck();
                    break;
                case R.id.rb_damage:
                    if (rbDamage.isChecked())
                        rgManholeStateOne.clearCheck();
                    break;
                case R.id.rb_heave:
                    if (rbHeave.isChecked())
                        rgManholeStateOne.clearCheck();
                    break;
            }
        }
    }

 

 

 

 

你可能感兴趣的:(Android RadioGroup多行显示,解决单选问)