软件编程
位置:首页>> 软件编程>> Android编程>> Android RadioGroup多行显示效果 解决单选问题

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

作者:艾阳丶  发布时间:2023-05-28 18:23:55 

标签:Android,RadioGroup,多行显示

导语

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

Android 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;
  }
 }
}

来源:https://blog.csdn.net/csdn_aiyang/article/details/70242504

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com