RadioGroup三次调用onCheckChanged()

我一直在努力处理RadioGroup中RadioButton的编程检查问题。 看起来,一个check()调用引发了三个事件 – 第一个RadioButton和第二个两次,这是我的目标。 同时单击界面中的第二个RadioButton只会导致一个事件出现,这是正确的。

那么,有没有办法避免多重事件的发生?

 public class RadiogroupActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); RadioGroup r = (RadioGroup) findViewById(R.id.radioGroup1); RadioButton b = (RadioButton) findViewById(R.id.radio1); r.setOnCheckedChangeListener(onPromobuttonsClick); r.check(R.id.radio1); } private OnCheckedChangeListener onPromobuttonsClick = new OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { Log.d("x", "x"); } }; } 

Solutions Collecting From Web of "RadioGroup三次调用onCheckChanged()"

那么,有没有办法避免多重事件的发生?

调用b.setChecked(true); 代替。


通过源代码快速查看确认RadioGroup#check()确实调用了OnCheckChangedListener三次…

  1. 当前select未被选中时,
  2. 当新的RadioButton被选中时,
  3. 当RadioGroup保存哪个RadioButton现在被检查。

奇怪的怪癖。

只需发布您的r.setOnCheckedChangeListener(onPromobuttonsClick);onResume()方法。 这是我的作品。

所以这是一个旧的,但我也有类似的行为。 我find的解决方法是调用RadioButtontoggle()方法,而不是RadioGroupcheck()方法。

所以在这个例子中,你只需要交换

 r.check(R.id.radio1); 

 b.toggle(); 

因为b已经是id为R.id.radio1的视图。

当我想logging单选button的分析时,我遇到了这个问题,但是无线电组呼叫的方式是使用导致onCheckedChangeListener多次调用(发送太多事件)的.check()处理的。

我以下面的方式处理它,每次点击只得到一个事件:

 // create listeners so we don't duplicate the creation in for loop View.OnClickListener onClickListener = new View.OnClickListener() { @Override public void onClick(View v) { // whatever you want to do here } }; // add on click listener to all radio buttons int buttonCount = buttonGroup.getChildCount(); for (int i = 0; i < buttonCount; i++) { if (buttonGroup.getChildAt(i) instanceof RadioButton) { buttonGroup.getChildAt(i).setOnClickListener(onClickListener); } }