1.多次调用 setOnCheckedChangeListener
错误代码
rg_wonder.check(R.id.rd_recommand);
解决方法
((RadioButton) rg_wonder.getChildAt(0)).setChecked(true);
2.多次调用 PageChangeListener
错误代码
思路是根据选中的索引,去更改对应的样式,看起来很合理,但这就是问题所在,多次check了。
if (i == position) {
button.setTextSize(18);
button.setChecked(true);//错误的关键,多设置了一次check
TextPaint tp = button.getPaint();
tp.setFakeBoldText(true);
} else {
button.setTextSize(15);
button.setChecked(false);;//错误的关键,多设置了一次check
TextPaint tp = button.getPaint();
tp.setFakeBoldText(false);
}
解决的方法是:
将check与否交给系统api去处理,ui状态的改变,取RadioButton当前的状态为准。
if (button.isChecked()) {
button.setTextSize(18);
TextPaint tp = button.getPaint();
tp.setFakeBoldText(true);//设置文本加粗
} else {
button.setTextSize(15);
TextPaint tp = button.getPaint();
tp.setFakeBoldText(false);
}
问题根本是:
需求(RadioButton选中的时候,需要使用不同的背景颜色,字体大小,字体颜色)。为了改变背景,我用代码设置了 RadioButton的状态,相当于在原来的check管理之上,我又多设置了一次 check的状态,就是这个原因导致了多次回调。(这个问题找了很久才找到。自己坑自己的典型)