您的代码很少有问题。
如果用户首先选择了单选按钮选择,则不会触发rGroup.setOnCheckedChangeListener()。需要重新放置在onDateChanged()之外。
重定位后,它也将无法工作,因为无线电组侦听器不知道datePicker条目是否也被更改。
用户可以选择先更新性别,然后选择日期,反之亦然。可能的解决方案如下:
查看
fixme评论。
// fixme: Add class variables (booleans) to keep track of changed ui items private Boolean isDatePickeronDateChanged = false; private Boolean isRadioGrouponCheckedChanged = false;// fixme: Re-locate rGroup.setonCheckedChangeListener(..) to here. RadioButton non_binary_radio_button = rGroup.findViewById(rGroup.getCheckedRadioButtonId()); rGroup.setonCheckedChangeListener(new RadioGroup.onCheckedChangeListener() { public void onCheckedChanged(RadioGroup group, int checkedId) { //... isRadioGrouponCheckedChanged = true; if (isDatePickeronDateChanged && isRadioGroupOnCheckedChanged) { continue_register_birthday_gender_button.setEnabled(true); }// fixme: Remove previous rGroup.setonCheckedChangeListener(..) inside onDateChanged() to above datePicker_birthday.init(... { @Override public void onDateChanged(DatePicker datePicker, int year, int month, int dayOfMonth) { //... isDatePickeronDateChanged = true; if (isDatePickeronDateChanged && isRadioGroupOnCheckedChanged) { continue_register_birthday_gender_button.setEnabled(true); }- 上述解决方案中的一些冗余代码:
isRadioGrouponCheckedChanged = true; if (isDatePickeronDateChanged && isRadioGroupOnCheckedChanged) { continue_register_birthday_gender_button.setEnabled(true); }
可以简化为
isRadioGrouponCheckedChanged = true; if (isDatePickerOnDateChanged) { continue_register_birthday_gender_button.setEnabled(true); }因为
&& isRadioGroupOnCheckedChanged前面的陈述总是正确的
isRadioGrouponCheckedChanged =true;。



