现象
代码贴在了最下方。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为初始的都不选中状态。