欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2023-10-31 09:04:40
导语 如下图所示,这是一个导航选择弹框。进行单项选择,然后会监听回调选择的事件。问题是android的radiobutton是一般是放在radiogroup中进行管理的,而radio...

导语

如下图所示,这是一个导航选择弹框。进行单项选择,然后会监听回调选择的事件。问题是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;
   }
  }
 }

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