android开发问题自定义控件

一般形式是问题+单选/多选结构。

先看下效果图:


原理:单选用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;//是判断是否多选和单选混合


猜你喜欢

转载自blog.csdn.net/u010074743/article/details/78933295