Checkbox.OnCheckedChangeListener
との両方を実装するアクティビティがありますRadioGroup.OnCheckedChangeListener
。 グループは両方とも動的に生成され、 と同じものを渡しActivity
ますlistener
。
ただし、RadioGroup をクリックすると、RadioGroup.OnCheckChangeListener
完全に無視されますが、ここで奇妙になります。発動CheckBox.OnCheckChangeListener
!アクティビティを渡す前に RadioGroup リスナーにキャストしようとしましたが、RadioGroup はそれを受け入れることさえできず、CheckBox リスナーだけが通過します。
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(subquestion.getQuestionType().equals("MULTIPLE_CHOICE_MULTI_ANSWER")) {
String selected = buttonView.getText().toString();
if (subquestion.getAnswer().getDataList() != null) {
Answer answer = subquestion.getAnswer();
ArrayList<String> checked = answer.getDataList();
if (checked.contains(selected)) {
checked.remove(selected);
Log.d("Checkbox" + buttonView.getId(), "unchecked");
} else {
checked.add(selected);
Log.d("Checkbox" + buttonView.getId(), "checked");
}
} else {
ArrayList<String> checked = new ArrayList<String>();
checked.add(selected);
subquestion.getAnswer().setDataList(checked);
Log.d("Checkbox" + buttonView.getId(), "checked");
}
}
if(subquestion.getQuestionType().equals("MULTIPLE_CHOICE_SINGLE_ANSWER")) {
RadioGroup group = buttonView; //CAN'T BE DONE
String selected = group.getFocusedChild().getId() + "";
subquestion.getAnswer().setData(selected);
Log.d("Radiobutton " + selected + group.getFocusedChild().getId(), "selected");
}
}
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
//This does NOTHING, can't even be passed to the RadioGroup as a listener
}
buttonView から RadioGroup を取得するにはどうすればよいですか? コードですべてを生成しますが、毎回異なるため、何がクリックされたかを判断するための静的 ID はありません。ラジオボタンにIDを渡してどれがどれであるかを知らせますが、このようにはできません。
チェックボックスに対しては完全に機能しますが、Android が間違ったイベントをスローし、RadioGroup に対して間違ったイベント ハンドラーを使用しているように見えるだけです。
読んでくれてありがとう!