Радиокнопка частично отключена в Oreo

Я получаю странное поведение радиокнопки в Oreo 8.0.1, радиокнопка частично выбрана, что уже обсуждалось на Stackoverflow здесь и здесь. введите описание изображения здесь
На изображении выше изображение First Radio Button выделено частично, это происходит только тогда, когда мы установили переключатель programmatically Это, я думаю, ошибка анимации в соответствии с этим ответ и исправлено вызовом jumpDrawablesToCurrentState() , но теперь я получаю partially unChecked при изменении состояния только programmatically в первый раз, посмотрите введите здесь описание изображения Здесь выбрана первая радиокнопка, но вторая радиокнопка все еще частично отмечена.


person Hussain Sherwani    schedule 12.04.2018    source источник


Ответы (1)


Да, это похоже на ошибку анимации, но вы должны обновить свой макет, используя методы invalidate и requestLayout.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
    view.invalidate();
    view.requestLayout();
 }
person Bilal uddin    schedule 18.04.2018
comment
Я думаю, что requestLayout добавляет ненужные затраты на производительность, поскольку макет не изменился. Почему бы вам не объяснить, что делает каждый метод и почему мы должны его вызывать? - person Eugen Pechanec; 18.04.2018
comment
@Eugen Pechane спасибо, есть ли лучшее решение, чтобы избежать таких проблем? Я получаю это только в Oreo 8.0.1, но это решает мою проблему. - person Hussain Sherwani; 18.04.2018
comment
@Eugen Pechanec Я также столкнулся с той же проблемой только на устройстве Oreo, и эта строка кода помогает мне исправить это, если у вас есть лучшее решение, дайте мне знать - person Bilal uddin; 18.04.2018
comment
Я предполагаю, что invalidate будет достаточно. invalidate вызывает перерисовку, чего должно быть достаточно, потому что нарушается только альфа-канал. requestLayout заставляет пересчитывать позицию всей иерархии компоновки, что является пустой тратой ресурсов ЦП, потому что позиция правильная. Я хочу, чтобы вы знали, что делаете. В своих ответах объясните, что делает ваш код, чтобы другие люди тоже знали об этом. @HussainSherwani Не просто слепо копируйте и вставляйте что-то, не понимая. - person Eugen Pechanec; 18.04.2018
comment
@Eugen Pechanec Спасибо за это, на самом деле я не копирую код вслепую, я пробовал это только с invalidate, но все же столкнулся с проблемой, пожалуйста, проверьте ..https://stackoverflow.com/a/35281876/3026578, также я уже исправил эту проблему до этого ответа ... Ура - person Hussain Sherwani; 18.04.2018
comment
@HussainSherwani Спасибо за эту ссылку, да, я тоже ожидал чего-то подобного в этом ответе. По ссылке написано: If you are not doing anything to your view that would change its size, then you do not have to call requestLayout(). так что теперь вопрос, почему ваш кейс не работает без requestLayout... - person Eugen Pechanec; 18.04.2018
comment
Спасибо, на самом деле мой Radio Button не находится в RadioGroup, я обрабатывал их вручную, в некоторых ситуациях я показываю three button в некоторых условиях я также показываю two и one в зависимости от моей ситуации. На самом деле это ошибка анимации, она возникла в конкретном сценарии только в первый раз, второй раз, когда я повторяю тот же сценарий, этого не произойдет, я тоже debugged этого. При отладке я получил mCheked = false для второй кнопки. но он отображается как частично проверенный. похоже на баг анимации. Ваше здоровье - person Hussain Sherwani; 18.04.2018