Radio Button is only partially checked

2.6k views Asked by At

I know this sound weird so here is the picture.

enter image description here

It hold the correct value. The correct radiobutton is (partially) selected. All logic in the OnCheckedChangeListener is executed correctly. I'm completly stunned. Why is the radio button not fully checked?

Only thing I can think of is that i'm using 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

Marcos suggestion I can't see the white tick. This is not the case. enter image description here

EDIT2

Layout:

<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

There are 6 answers

4
Nipper On BEST ANSWER

Looks like an Animation Bug. When using a CompoundButton on a Fragment inside a ViewPager the drawable state is not set correctly.

This happens also for Checkboxes as seen here: Android Nougat: Why do checkboxes on Fragment have incomplete state when selected programmatically (but look fine on Lollipop).

Calling jumpDrawablesToCurrentState() just after calling RadioGroup.check(id) or Checkbox.setChecked(true) seems to fix the problem (thx @Dalmas)

7
Marcos Vasconcelos On

Your theme is Dark and you cant see the white tick, you need to change it to another color.

0
Deepan On

Try changing your Theme or the color attributes of your radio button

3
dileep krishnan On

change background color from white to another color it will appear

0
Zain Aftab On

Have you tried using RadioButton instead of android.support.v7.widget.AppCompatRadioButton i think that might solve the issue

On the other hand, here you can find a doc of how to style RadioButtons

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

  1. Declare custom style in your styles.xml file.

<style name="MyRadioButton" parent="Theme.AppCompat.Light"> <item name="colorControlNormal">@color/indigo</item> <item name="colorControlActivated">@color/pink</item> </style>

  1. Apply this style to your RadioButton via android:theme attribute.

`

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

source: https://stackoverflow.com/a/35044856/4492504

0
smarroufin On

In addition to the excellent answer of @Nipper, I wrote a Kotlin extension in my project to easily fix the issue :

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

Everywhere I should do radioButton.isChecked = true or radioButton.setChecked(true) instead I do radioButton.setCheckedFixed(true).