Радиокнопка проверена только частично

Я знаю, что это звучит странно, поэтому вот картинка.

введите описание изображения здесь

Он содержит правильное значение. Выбрана (частично) правильная радиокнопка. Вся логика в 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);
            }
        });

ИЗМЕНИТЬ1

Предложение Маркоса Я не вижу белую галочку. Это не тот случай. введите описание изображения здесь

ИЗМЕНИТЬ2

Макет:

<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>

person Robin Dijkhof    schedule 28.08.2017    source источник
comment
Вы имеете в виду тот факт, что у круга нет точки в центре? Если да, то какая у вас тема, и делали ли вы что-нибудь, чтобы настроить внешний вид RadioButton?   -  person CommonsWare    schedule 28.08.2017
comment
@CommonsWare Да, это то, о чем я говорю! Я ничего не делал со стилем, кроме установки colorPrimary и colorAccent. У меня не было этой проблемы, когда все было синхронно.   -  person Robin Dijkhof    schedule 28.08.2017
comment
Возможно, тема, которую вы расширяете, использует белые точки выбора. Если вы используете темную тему, переключитесь на светлую или наоборот   -  person Marcos Vasconcelos    schedule 28.08.2017
comment
Когда я выбираю его вручную, он работает нормально. Также, когда событие срабатывает во второй раз.   -  person Robin Dijkhof    schedule 28.08.2017
comment
Вы пытались обработать это в основном потоке с помощью .observeOn(AndroidSchedulers.mainThread()).subscribe(...)?   -  person Kirill    schedule 20.09.2017
comment
@ g4s8 К сожалению, это не помогло.   -  person Robin Dijkhof    schedule 20.09.2017
comment
Добавьте свой макет xml   -  person Qamar    schedule 25.09.2017
comment
Вы устанавливаете возможность рисования для радиокнопки динамически?   -  person Pablo Baxter    schedule 27.09.2017
comment
@PabloBaxter только цвет   -  person Robin Dijkhof    schedule 29.09.2017


Ответы (6)


Похоже на ошибку анимации. При использовании CompoundButton во фрагменте внутри ViewPager состояние рисования устанавливается неправильно.

Это также происходит для флажков, как показано здесь: >Android Nougat: почему флажки на Fragment имеют неполное состояние при программном выборе (но выглядят нормально на Lollipop).

Вызов jumpDrawablesToCurrentState() сразу после вызова RadioGroup.check(id) или Checkbox.setChecked(true) решает проблему (спасибо @Dalmas)

person Nipper    schedule 30.01.2018
comment
После всех этих ответов, наконец, что-то, что имеет смысл. - person Robin Dijkhof; 31.01.2018
comment
Это происходит в Nexus 5x API 27. Фрагмент находится в действии с адаптером фрагмента. #jumpDrawablesToCurrentState исправил это - person Reinherd; 06.02.2018
comment
Для меня jumpDrawablesToCurrentState устранил проблему. Спасибо! - person Oya; 07.02.2019
comment
radioButton.jumpDrawablesToCurrentState(); работает на меня - person Ramesh kumar; 25.04.2019

У вас темная тема, и вы не видите белую галочку, вам нужно изменить ее на другой цвет.

person Marcos Vasconcelos    schedule 20.09.2017
comment
Obs: Я прокомментировал это 28 августа. - person Marcos Vasconcelos; 20.09.2017
comment
Если это правда, изменение цвета фона моей активности покажет это правильно? Но тут мне приходит в голову новый вопрос, почему иногда он белый, а иногда нет? - person Robin Dijkhof; 20.09.2017
comment
Это зависит от устройства, с которым вы тестируете, и да, изменение фона заставит его появиться - person Marcos Vasconcelos; 20.09.2017
comment
Тогда почему он иногда белый, а иногда нет? Хотя тот же аппарат - person Robin Dijkhof; 20.09.2017
comment
Хм, может дело в анимации? Вы уверены, что ваш метод проверяет только одну из ваших проверок? - person Marcos Vasconcelos; 20.09.2017
comment
Абсолютно уверен. - person Robin Dijkhof; 20.09.2017
comment
Поэтому создайте минимальный воспроизводимый код, чтобы мы могли протестировать - person Marcos Vasconcelos; 20.09.2017

В дополнение к отличному ответу @Nipper я написал расширение Kotlin в своем проекте, чтобы легко решить проблему:

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

Везде я должен делать radioButton.isChecked = true или radioButton.setChecked(true), вместо этого я делаю radioButton.setCheckedFixed(true).

person smarroufin    schedule 20.08.2020

Попробуйте изменить тему или цветовые атрибуты переключателя.

person Deepan    schedule 25.09.2017

изменить цвет фона с белого на другой цвет, он появится

person dileep krishnan    schedule 26.09.2017
comment
Как ты пропустил эту красную картинку? - person Robin Dijkhof; 26.09.2017
comment
извините, Робин Дейкхоф, сэр - person dileep krishnan; 28.09.2017
comment
я думаю, что он применяет какую-то тему - person dileep krishnan; 28.09.2017

Вы пытались использовать RadioButton вместо android.support.v7.widget.AppCompatRadioButton, я думаю, это может решить проблему

С другой стороны, здесь вы можете найти документ о том, как стилизовать RadioButtons.

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

  1. Объявите собственный стиль в файле styles.xml.

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

  1. Примените этот стиль к своему RadioButton через атрибут android:theme.

`

   <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

person Zain Aftab    schedule 27.09.2017