一般形式是问题+单选/多选结构。
先看下效果图:
原理:单选用RadioGroup来动态添加RadioButton
示例代码:
public class MyQuestionView extends LinearLayout{
private Context context;
private boolean isAddRG;
private RadioGroup rg;
private QuestionListResult.ListBean listAnswer ;
private boolean isRadioCheckExist = false;
private boolean isRadio = false;
private boolean isCheck = false;
public MyQuestionView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
this.context = context;
}
/**
* 设置问题和答案
* @param questionBean
*/
public void setQuestion(final int number, QuestionListResult.ListBean questionBean){
if(questionBean == null || TextUtils.isEmpty(questionBean.getPdesc()) || questionBean.getAnswer()== null){
return;
}
this.listAnswer = questionBean;
isRadioCheckExist = false;
isRadio = false;
isCheck = false;
isAddRG = false;
removeAllViews();
View view = LayoutInflater.from(getContext()).inflate(R.layout.item_question, null);
TextView tvTitle = (TextView)view.findViewById(R.id.tv_question_title);
final LinearLayout llAnswer = (LinearLayout)view.findViewById(R.id.ll_question_answer);
tvTitle.setText(questionBean.getPdesc());
for(int i = 0; i< questionBean.getAnswer().size();i++){
QuestionListResult.ListBean.AnswerBean answerBean = questionBean.getAnswer().get(i);
if(answerBean.getSelect_type() == NormalType.CHECK_TYPE){
//多选
CheckBox cb = UIUtils.inflate(context,R.layout.check_question).findViewById(R.id.cb_answer);
cb.setText(answerBean.getPdesc());
cb.setChecked(answerBean.isSelect());
cb.setId(i);
cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean isChecked) {
listAnswer.getAnswer().get(compoundButton.getId()).setSelect(isChecked);
if(ActivityUtils.isActivityExist(QuestionActivity.class)){
ActivityUtils.getActivity(QuestionActivity.class).setQuestionListBean(number,listAnswer);
if(isRadioCheckExist){
ActivityUtils.getActivity(QuestionActivity.class).reResetQuestion(number,NormalType.CHECK_TYPE);
}
}
}
});
llAnswer.addView(cb);
isCheck = true;
} else if(answerBean.getSelect_type() == NormalType.RADIO_TYPE){
//单选
if(!isAddRG){
rg = UIUtils.inflate(context,R.layout.rg_question).findViewById(R.id.rg_question);
llAnswer.addView(rg);
isAddRG = true;
}
if(rg != null){
//单选框
RadioButton rb = UIUtils.inflate(context,R.layout.radio_question).findViewById(R.id.rb_question);
rb.setText(answerBean.getPdesc());
rb.setChecked(answerBean.isSelect());
rb.setId(i);
rg.addView(rb);
}
isRadio = true;
}
}
isRadioCheckExist = isCheck && isRadio;
rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int checkId) {
listAnswer.getAnswer().get(checkId).setSelect(true);
if(ActivityUtils.isActivityExist(QuestionActivity.class)){
ActivityUtils.getActivity(QuestionActivity.class).setQuestionListBean(number,listAnswer);
if(isRadioCheckExist){
ActivityUtils.getActivity(QuestionActivity.class).reResetQuestion(number,NormalType.RADIO_TYPE);
}
}
}
});
addView(view);
}
}
isRadioCheckExist = isCheck && isRadio;//是判断是否多选和单选混合