Android 功能篇之 多行Item 解决单选问题

前提:

如下图所示,这是一个导航选择弹框。进行单项选择,然后会监听回调选择的事件。问题是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;
        }
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值