前提:
如下图所示,这是一个导航选择弹框。进行单项选择,然后会监听回调选择的事件。问题是Android的RadioButton是一般是放在RadioGroup中进行管理的,而RadioGroup又是线性布局,即单行有效,多行无效。如图那种就需要两个RadioGroup来进行合作。那么如果进行合作呢?
效果如下
分析:
RadioGroup多行显示其实就是两个RadioGroup进行切换,使用RadioGroup的clearCheck()方法进行操作。
但是在使用clearCheck()之前,如果RadioGroup已经设置过监听,执行就会报错误。
正确方法如下:
先调用
setOnCheckedChangeListener(null)
再调用
clearCheck()然后重新setOnCheckedChangeListener(checkedListener)
代码
1、布局如下:
<RadioButton
android:background="@drawable/pop_start_lv_report_bg"
android:id="@+id/user_report_rb_illegal"
android:layout_weight="1"
android:layout_width="@dimen/dp_110"
android:layout_height="@dimen/dp_35"
android:gravity="center"
android:button="@null"
android:drawablePadding="@dimen/dp_10"
android:text="违法违禁"
android:textColor="@color/white"
android:textSize="@dimen/sp_13"
tools:ignore="HardcodedText" />
<RadioButton
android:layout_weight="1"
android:background="@drawable/pop_start_lv_report_bg"
android:id="@+id/user_report_rb_obscene_porn"
android:layout_width="@dimen/dp_110"
android:layout_height="@dimen/dp_35"
android:layout_marginStart="@dimen/dp_8"
android:button="@null"
android:gravity="center"
android:text="淫秽色情"
android:textColor="@color/white"
android:textSize="@dimen/sp_13"
tools:ignore="HardcodedText" />
<RadioButton
android:layout_weight="1"
android:background="@drawable/pop_start_lv_report_bg"
android:id="@+id/user_report_rb_behavior"
android:layout_width="@dimen/dp_110"
android:layout_height="@dimen/dp_35"
android:layout_marginStart="@dimen/dp_8"
android:button="@null"
android:gravity="center"
android:text="危险行为"
android:textColor="@color/white"
android:textSize="@dimen/sp_13"
tools:ignore="HardcodedText"/>
</RadioGroup>
<RadioGroup
android:id="@+id/user_report_rg_manhole_state_two"
android:layout_marginEnd="@dimen/dp_15"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_15"
android:layout_marginTop="@dimen/dp_8"
android:orientation="horizontal">
<RadioButton
android:layout_weight="1"
android:background="@drawable/pop_start_lv_report_bg"
android:id="@+id/user_report_rb_fraud"
android:layout_width="@dimen/dp_110"
android:layout_height="@dimen/dp_35"
android:button="@null"
android:gravity="center"
android:text="广告诈骗"
android:textColor="@color/white"
android:textSize="@dimen/sp_13"
tools:ignore="HardcodedText" />
<RadioButton
android:layout_weight="1"
android:background="@drawable/pop_start_lv_report_bg"
android:id="@+id/user_report_rb_insult"
android:layout_width="@dimen/dp_110"
android:layout_height="@dimen/dp_35"
android:layout_marginStart="@dimen/dp_8"
android:button="@null"
android:gravity="center"
android:text="侮辱谩骂"
android:textColor="@color/white"
android:textSize="@dimen/sp_13"
tools:ignore="HardcodedText"/>
<RadioButton
android:layout_weight="1"
android:background="@drawable/pop_start_lv_report_bg"
android:id="@+id/user_report_rb_other"
android:layout_width="@dimen/dp_110"
android:layout_height="@dimen/dp_35"
android:layout_marginStart="@dimen/dp_8"
android:button="@null"
android:gravity="center"
android:text="其他"
android:textColor="@color/white"
android:textSize="@dimen/sp_13"
tools:ignore="HardcodedText" />
</RadioGroup>
2、具体操作如下:
控件调用:
@InjectView(R.id.user_report_rg_manhole_state_one)
RadioGroup rgManholeStateOne;
@InjectView(R.id.user_report_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;
}
}
}