Android的clearCheck()为RadioGroup错误?

我遇到了RadioGroup的clearChecked()问题。 我向用户显示一个select题,在用户select答案后,我检查答案,给他一些反馈,然后转到下一个问题。 在转到下一个问题的过程中,我清除RadioGroup的检查。

任何人都可以向我解释为什么onCheckedChanged方法被调用3次? 一旦实际发生变化(用户发生变化),一旦我clearCheck(用-1作为选定的id)和一次之间(用户再次变化)?

据我所知,第二个触发器是由clearCheck引起的。 代码如下:

private void checkAnswer(RadioGroup group, int checkedId){ // this makes sure it doesn't blow up when the check is cleared // also we don't check the answer when there is no answer if (checkedId == -1) return; if (group.getCheckedRadioButtonId() == -1) return; // check if correct answer if (checkedId == validAnswerId){ score++; this.giveFeedBack(feedBackType.GOOD); } else { this.giveFeedBack(feedBackType.BAD); } // allow for user to see feedback and move to next question h.postDelayed(this, 800); } private void changeToQuestion(int questionNumber){ if (questionNumber >= this.questionSet.size()){ // means we are past the question set // we're going to the score activity this.goToScoreActivity(); return; } //clearing the check gr.clearCheck(); // give change the feedback back to question imgFeedback.setImageResource(R.drawable.question_mark); //OTHER CODE HERE } 

和运行方法看起来像这样

 public void run() { questionNumber++; changeToQuestion(questionNumber); } 

Solutions Collecting From Web of "Android的clearCheck()为RadioGroup错误?"

我发现,如果一个项目被选中,并且你在radio组上调用clearCheck() ,它将会调用两次onCheckedChanged 。 第一次使用被检查的项目的id,第二次使用-1 / View.NO_ID 。 恕我直言,这是一个错误,显然至less有1.6左右。 看到这个谷歌代码错误报告: http : //code.google.com/p/android/issues/detail?id=4785

似乎唯一的解决办法是检查实际的RadioButton.isChecked()并testing它是真还是假。 这种onCheckedChanged违背了onCheckedChanged返回项目ID的目的,因为你现在不得不保持对这些button的引用或每次调用findViewById

我怀疑他们会修复这个,因为改变它可能会以意想不到的方式破坏现有的代码。

我面临同样的问题,我解决了与其他工作。

  1. 将CheckedChangeListener设置为NULL
  2. 做你的操作
  3. 重新设置您的OnCheckedChangeListener

代码snnipet:

 rdbGroup.setOnCheckedChangeListener(null); rdbGroup.clearCheck(); rdbGroup.setOnCheckedChangeListener(checkedChangeListener); 

希望这将有助于ツ

我有类似的问题。 我的解决scheme

在程序中:

 public void onCheckedChanged(RadioGroup rGroup, int checkedId) 

我检查checkedId。 如果使用clearCheck(),则等于-1,否则等于选定的radiogroup子