Android RadioGroup多行显示效果 解决单选问题

这篇文章主要为大家详细介绍了Android RadioGroup多行显示效果,解决单选问题,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

导语

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

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

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

正确方法如下:

先调用

setOnCheckedChangeListener(null)

再调用

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

案例代码

1、布局如下:


<RadioGroup
      android:id="@+id/rg_manhole_state_one"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginTop="5dp"
      android:layout_toRightOf="@id/tv_manhole_state"
      android:orientation="horizontal"
      android:paddingTop="@dimen/padding_5">
 
      <RadioButton
       android:id="@+id/rb_intact"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:button="@null"
       android:drawableLeft="@drawable/bg_radiobutten"
       android:drawablePadding="@dimen/padding_10"
       android:text="@string/intact"
       android:textColor="@color/white"
       android:textSize="@dimen/small_size" />
 
      <RadioButton
       android:id="@+id/rb_lose"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginLeft="30dp"
       android:button="@null"
       android:drawableLeft="@drawable/bg_radiobutten"
       android:drawablePadding="@dimen/padding_10"
       android:text="@string/lose"
       android:textColor="@color/white"
       android:textSize="@dimen/small_size" />
 
      <RadioButton
       android:id="@+id/rb_sunken"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginLeft="30dp"
       android:button="@null"
       android:drawableLeft="@drawable/bg_radiobutten"
       android:drawablePadding="@dimen/padding_10"
       android:text="@string/sunken"
       android:textColor="@color/white"
       android:textSize="@dimen/small_size" />
     </RadioGroup>
     <RadioGroup
     android:id="@+id/rg_manhole_state_two"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content"
     android:layout_marginLeft="@dimen/padding_100"
     android:layout_marginTop="5dp"
     android:orientation="horizontal"
     android:paddingTop="@dimen/padding_5">
 
     <RadioButton
      android:id="@+id/rb_occupation"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:button="@null"
      android:drawableLeft="@drawable/bg_radiobutten"
      android:drawablePadding="@dimen/padding_10"
      android:text="@string/occupation"
      android:textColor="@color/white"
      android:textSize="@dimen/small_size" />
 
     <RadioButton
      android:id="@+id/rb_damage"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginLeft="30dp"
      android:button="@null"
      android:drawableLeft="@drawable/bg_radiobutten"
      android:drawablePadding="@dimen/padding_10"
      android:text="@string/damage"
      android:textColor="@color/white"
      android:textSize="@dimen/small_size" />
 
     <RadioButton
      android:id="@+id/rb_heave"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_marginLeft="30dp"
      android:button="@null"
      android:drawableLeft="@drawable/bg_radiobutten"
      android:drawablePadding="@dimen/padding_10"
      android:text="@string/heave"
      android:textColor="@color/white"
      android:textSize="@dimen/small_size" />
</RadioGroup>

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实现上下左右滑动的界面布局,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章主要为大家详细介绍了Android仿抖音上下滑动布局,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
在 Android 中倒计时功能是比较常用的一个功能,比如短信验证码,付款倒计时等。今天小编给大家分享Android 简单实现倒计时功能,感兴趣的朋友一起看看吧
这篇文章主要给大家介绍了关于Android使用自定义View实现横行时间轴效果的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Android具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
这篇文章主要给大家介绍了关于android点击无效验证的解决方法,文中通过示例代码介绍的非常详细,对各位android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
这篇文章主要给大家介绍了关于Android中StateListAnimator的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧