前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android RadioGroup多行显示效果 解决单选问题

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

作者头像
砸漏
发布2020-10-16 11:49:17
1.5K0
发布2020-10-16 11:49:17
举报
文章被收录于专栏:恩蓝脚本

导语

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

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

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

正确方法如下:

先调用

setOnCheckedChangeListener(null)

再调用

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

案例代码

1、布局如下:

代码语言:javascript
复制
<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、具体操作如下:

声明控件:

代码语言:javascript
复制
@InjectView(R.id.rg_manhole_state_one)
RadioGroup rgManholeStateOne;
@InjectView(R.id.rg_manhole_state_two)
RadioGroup rgManholeStateTwo;

设置监听:

代码语言:javascript
复制
rgManholeStateOne.setOnCheckedChangeListener(new OnMyManholeStateOneCheckedChangeListener());
rgManholeStateTwo.setOnCheckedChangeListener(new OnMyManholeStateTwoCheckedChangeListener());

实现单选:

代码语言:javascript
复制
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;
}
}
}

以上就是本文的全部内容,希望对大家的学习有所帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档