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;//是判斷是否多選和單選混合


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章