android里面RadioButton设置setChecked(true)失效的解决方案

现象

代码贴在了最下方。OnCheckedChangeListener已经收到监听,并且为checked = true,但是RadioButton的状态是未选中的状态。
最后发现是 android:drawableStart="@drawable/sel_detail_table_grid"这里出了问题。

验证

去除这两句代码,观察原始图标状态,是正常更换的。

android:button="@null"
android:drawableStart="@drawable/sel_detail_table_grid"

问题

做项目的总要遇到自定义RadioButton样式的需求,我这里是使用android:button="@null"把原始按钮去掉,然后添加了一个自定义图标。明明设置了sel标签选中状态,自适应图标,点击时是正常的,但是首次进入设置的默认选中却只是触发了事件,没有自动更换图标。

解决办法

android:drawableStart="@drawable/sel_detail_table_grid"
替换成
android:background="@drawable/sel_detail_table_grid"

根本原因

不知道

原始代码

tableRadioGroup.setOnCheckedChangeListener((group, checkedId) -> showTableFragment(checkedId));
tableRadioGroup.check(R.id.grid_rb);
  <RadioGroup
                android:id="@+id/table_rg"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="end|center_vertical"
                android:orientation="horizontal">

                <RadioButton
                    android:id="@+id/grid_rb"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_marginEnd="16dp"
                    android:button="@null"
                    android:drawableStart="@drawable/sel_detail_table_grid" />

                <RadioButton
                    android:id="@+id/list_rb"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:button="@null"
                    android:drawableStart="@drawable/sel_detail_table_list" />
            </RadioGroup>

sel_detail_table_grid.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/ic_detail_table_grid" android:state_checked="true" />
    <item android:drawable="@drawable/ic_detail_table_grid_" android:state_checked="false" />
</selector>

题外话:RadioGroup的clearCheck方法,可设置RadioButton为初始的都不选中状态。

猜你喜欢

转载自blog.csdn.net/changhuzichangchang/article/details/109113446