单选按钮仅部分检查

时间:2017-08-28 19:44:33

标签: android android-layout android-radiogroup android-radiobutton

我知道这听起来很奇怪,所以这就是图片。

enter image description here

它保持正确的值。选择(部分)正确的单选按钮。 OnCheckedChangeListener中的所有逻辑都正确执行。我完全惊呆了。为什么没有完全检查单选按钮?

我唯一能想到的就是我正在使用Rx2Firebase

periodRetriever = FirebaseHelper.getInstance(getContext()).getPeriod()
        .defaultIfEmpty(0)
        .distinctUntilChanged()
        .subscribe(new Consumer<Integer>() {
            @Override
            public void accept(@NonNull Integer headerType) throws Exception {
                getRadioViewChecked(headerType).setChecked(true);
            }
        });

EDIT1

马科斯建议我看不到白蜱。不是这种情况。 enter image description here

EDIT2

布局:

<RadioGroup
    android:id="@+id/rgPeriod"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <android.support.v7.widget.AppCompatRadioButton
        android:id="@+id/rbMonth"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="false"
        android:text="@string/month" />

    <android.support.v7.widget.AppCompatRadioButton
        android:id="@+id/rbWeek"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="false"
        android:text="@string/week" />

    <android.support.v7.widget.AppCompatRadioButton
        android:id="@+id/rb4Weeks"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:checked="false"
        android:text="@string/four_weeks" />


</RadioGroup>

6 个答案:

答案 0 :(得分:15)

看起来像动画Bug。在ViewPager内的Fragment上使用CompoundButton时,未正确设置drawable状态。

这也适用于Checkboxes,如下所示:Android Nougat: Why do checkboxes on Fragment have incomplete state when selected programmatically (but look fine on Lollipop)

在调用RadioGroup.check(id)或Checkbox.setChecked(true)之后调用jumpDrawablesToCurrentState()似乎解决了问题(thx @Dalmas)

答案 1 :(得分:0)

你的主题是黑暗的,你看不到白色的嘀嗒声,你需要把它改成另一种颜色。

答案 2 :(得分:0)

除了@Nipper的出色回答外,我还在项目中编写了Kotlin扩展名,以轻松解决问题:

fun CompoundButton.setCheckedFixed(checked: Boolean) {
    isChecked = checked
    jumpDrawablesToCurrentState()
}

在每个地方都应该做radioButton.isChecked = trueradioButton.setChecked(true),而不是radioButton.setCheckedFixed(true)

答案 3 :(得分:-1)

尝试更改主题或单选按钮的颜色属性

答案 4 :(得分:-1)

将背景颜色从白色更改为将出现的另一种颜色

答案 5 :(得分:-1)

您是否尝试过使用RadioButton代替android.support.v7.widget.AppCompatRadioButton我认为可以解决问题

另一方面,在这里,您可以找到如何设置RadioButtons样式的文档

http://www.materialdoc.com/radio-button/

  1. 在styles.xml文件中声明自定义样式。
  2. <style name="MyRadioButton" parent="Theme.AppCompat.Light"> <item name="colorControlNormal">@color/indigo</item> <item name="colorControlActivated">@color/pink</item> </style>

    1. 通过android:theme属性将此样式应用于RadioButton。
    2. `

         <RadioButton
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:checked="true"
              android:text="Radio Button"
              android:theme="@style/MyRadioButton"/>
      

      来源:https://stackoverflow.com/a/35044856/4492504