Android答題Demo 支持單選多選判斷

在這裏插入圖片描述
主體類

public class MainActivity extends Activity {
    private String resultJosn = "{\"result\":\"1\",\"type\":\"1\",\"data\":[{\"type\":\"3\",\"eid\":\"11\",\"problem\":\"1、 什麼樣的團隊更容易獲得成功?\",\"trueanswer\":\"B\",\"optionData\":[{\"option\":\"團結\",\"isChecked\":\"0\"},{\"option\":\"精英\",\"isChecked\":\"0\"},{\"option\":\"聰明\",\"isChecked\":\"0\"},{\"option\":\"領導\",\"isChecked\":\"0\"}]},{\"type\":\"3\",\"eid\":\"12\",\"problem\":\"2、 學習態度\",\"trueanswer\":\"C\",\"optionData\":[{\"option\":\"好\",\"isChecked\":\"0\"},{\"option\":\"一般\",\"isChecked\":\"0\"},{\"option\":\"很好\",\"isChecked\":\"0\"},{\"option\":\"差\",\"isChecked\":\"0\"}]},{\"type\":\"2\",\"eid\":\"13\",\"problem\":\"3、 這件事真的是對的嗎\",\"trueanswer\":\"A\",\"optionData\":[{\"option\":\"正確\",\"isChecked\":\"0\"},{\"option\":\"錯誤\",\"isChecked\":\"0\"}]},{\"type\":\"2\",\"eid\":\"14\",\"problem\":\"4、 這個道理真的對嗎\",\"trueanswer\":\"B\",\"optionData\":[{\"option\":\"正確\",\"isChecked\":\"0\"},{\"option\":\"錯誤\",\"isChecked\":\"0\"}]},{\"type\":\"1\",\"eid\":\"15\",\"problem\":\"5、 老師姓什麼?\",\"trueanswer\":\"D\",\"optionData\":[{\"option\":\"趙\",\"isChecked\":\"0\"},{\"option\":\"錢\",\"isChecked\":\"0\"},{\"option\":\"孫\",\"isChecked\":\"0\"},{\"option\":\"李\",\"isChecked\":\"0\"}]},{\"type\":\"1\",\"eid\":\"16\",\"problem\":\"6、 這個要多少錢啊\",\"trueanswer\":\"C\",\"optionData\":[{\"option\":\"100\",\"isChecked\":\"0\"},{\"option\":\"200\",\"isChecked\":\"0\"},{\"option\":\"300\",\"isChecked\":\"0\"},{\"option\":\"400\",\"isChecked\":\"0\"}]},{\"type\":\"2\",\"eid\":\"17\",\"problem\":\"7、 我不用學這個課程也能成功\",\"trueanswer\":\"B\",\"optionData\":[{\"option\":\"正確\",\"isChecked\":\"0\"},{\"option\":\"錯誤\",\"isChecked\":\"0\"}]},{\"type\":\"2\",\"eid\":\"18\",\"problem\":\"8、 學習人數已經由300人了\",\"trueanswer\":\"A\",\"optionData\":[{\"option\":\"正確\",\"isChecked\":\"0\"},{\"option\":\"錯誤\",\"isChecked\":\"0\"}]},{\"type\":\"1\",\"eid\":\"19\",\"problem\":\"9、 該課程要上多久\",\"trueanswer\":\"A\",\"optionData\":[{\"option\":\"10分鐘\",\"isChecked\":\"0\"},{\"option\":\"20分鐘\",\"isChecked\":\"0\"},{\"option\":\"30分鐘\",\"isChecked\":\"0\"},{\"option\":\"40分鐘\",\"isChecked\":\"0\"}]},{\"type\":\"2\",\"eid\":\"20\",\"problem\":\"10、 學過這個課程的都成功了\",\"trueanswer\":\"B\",\"optionData\":[{\"option\":\"正確\",\"isChecked\":\"0\"},{\"option\":\"錯誤\",\"isChecked\":\"0\"}]}]}\n";
    //    private String resultJosn = "{\"result\":\"1\",\"type\":\"1\",\"data\":[{\"type\":\"2\",\"eid\":\"6\",\"problem\":\"1、 真不拿\",\"trueanswer\":\"A\",\"optionData\":[{\"option\":\"正確\",\"isChecked\":\"0\"},{\"option\":\"錯誤\",\"isChecked\":\"0\"}]},{\"type\":\"2\",\"eid\":\"7\",\"problem\":\"2、 這個怎麼做\",\"trueanswer\":\"A\",\"optionData\":[{\"option\":\"1\",\"isChecked\":\"1\"},{\"option\":\"2\",\"isChecked\":\"0\"},{\"option\":\"3\",\"isChecked\":\"0\"},{\"option\":\"4\",\"isChecked\":\"0\"}]},{\"type\":\"2\",\"eid\":\"8\",\"problem\":\"3、 wgergwe\",\"trueanswer\":\"B\",\"optionData\":[{\"option\":\"正確\",\"isChecked\":\"0\"},{\"option\":\"錯誤\",\"isChecked\":\"0\"}]},{\"type\":\"3\",\"eid\":\"9\",\"problem\":\"4、 szdfasdf\",\"trueanswer\":\"C\",\"optionData\":[{\"option\":\"112\",\"isChecked\":\"0\"},{\"option\":\"22\",\"isChecked\":\"0\"},{\"option\":\"23\",\"isChecked\":\"0\"},{\"option\":\"43\",\"isChecked\":\"1\"}]},{\"type\":\"2\",\"eid\":\"10\",\"problem\":\"5、 rqwerqw\",\"trueanswer\":\"B\",\"optionData\":[{\"option\":\"正確\",\"isChecked\":\"0\"},{\"option\":\"錯誤\",\"isChecked\":\"0\"}]}]}";
    private LinearLayout test_layout;
    private Page the_page;
    // 答案列表
    private ArrayList<Answer> the_answer_list;
    // 問題列表
    private ArrayList<Quesition> the_quesition_list;
    // 問題所在的View
    private View que_view;
    // 答案所在的View
    private View ans_view;
    private LayoutInflater xInflater;
    private Page page;
    // 下面這兩個list是爲了實現點擊的時候改變圖片,因爲單選多選時情況不一樣,爲了方便控制
    // 存每個問題下的TextView
    private ArrayList<ArrayList<TextView>> textlist = new ArrayList<ArrayList<TextView>>();
    // 存每個答案的TextView
    private ArrayList<TextView> textlist2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        xInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);//取到XMl中的佈局
        // 假數據
        initDate();
        // 提交按鈕
        TextView button = (TextView) findViewById(R.id.tv_commit);
        button.setOnClickListener(new submitOnClickListener(page));
    }

    private void initDate() {
        ArrayList<Quesition> quesitionsList = null;
        try {
            quesitionsList = new ArrayList<>();//問題列表

            JSONObject resultJson = new JSONObject(resultJosn);
            JSONArray arrayJson = resultJson.optJSONArray("data");

            for (int i = 0; i < arrayJson.length(); i++) {
                JSONObject subObject = arrayJson.getJSONObject(i);

                ArrayList<Answer> answers = new ArrayList<>();

                JSONArray arrayAnswerJson = subObject.optJSONArray("optionData");//問題的答案
                for (int j = 0; j < arrayAnswerJson.length(); j++) {
                    JSONObject answerObject = arrayAnswerJson.getJSONObject(j);
                    Answer a_answer = new Answer();
                    a_answer.setAnswerId("" + j);
                    a_answer.setAnswer_content(answerObject.getString("option"));
                    a_answer.setAns_state(Integer.parseInt(answerObject.getString("isChecked")));

                    answers.add(a_answer);
                }

                Quesition q_quesition = new Quesition();
                q_quesition.setQuesitionId(subObject.getString("eid"));//問題的id
                q_quesition.setType(subObject.getString("type"));//類型,1判斷 2單選 3不定項
                q_quesition.setContent(subObject.getString("problem"));//問題
                q_quesition.setAnswers(answers);
                q_quesition.setQue_state(0);

                quesitionsList.add(q_quesition);
            }
        } catch (JSONException e) {
            e.printStackTrace();
        }

        page = new Page();
        page.setPageId("1");
        page.setStatus("0");
        page.setTitle("調查問卷");
        page.setQuesitions(quesitionsList);
        // 加載佈局
        initView(page);
    }

    private void initView(Page page) {
        // TODO Auto-generated method stub
        // 這是要把問題的動態佈局加入的佈局
        test_layout = (LinearLayout) findViewById(R.id.lly_test);//問題的佈局
        TextView page_txt = (TextView) findViewById(R.id.txt_title);//頭部標題
        page_txt.setText(page.getTitle());
        // 獲得問題即第二層的數據
        the_quesition_list = page.getQuesitions();
        // 根據第二層問題的多少,來動態加載佈局
        for (int i = 0; i < the_quesition_list.size(); i++) {
            que_view = xInflater.inflate(R.layout.quesition_layout, null);
            ImageView iv_type = (ImageView) que_view.findViewById(R.id.iv_type);
            TextView txt_que = (TextView) que_view.findViewById(R.id.txt_question_item);
            // 這是第三層佈局要加入的地方
            LinearLayout add_layout = (LinearLayout) que_view.findViewById(R.id.lly_answer);

            View v_line = (View) que_view.findViewById(R.id.v_line);
            if (i == 0) {//第一道題目的分隔條不用顯示
                v_line.setVisibility(View.GONE);
            }

            //類型:1選擇題;2判斷題 3不定項
            if (the_quesition_list.get(i).getType().equals("1")) {
                iv_type.setImageResource(R.mipmap.single_menu);
            } else if (the_quesition_list.get(i).getType().equals("2")) {
                iv_type.setImageResource(R.mipmap.judge_menu);
            } else if (the_quesition_list.get(i).getType().equals("3")) {
                iv_type.setImageResource(R.mipmap.more_menu);
            }

            txt_que.setText(the_quesition_list.get(i).getContent());//設置問題題目
            // 獲得答案即第三層數據
            the_answer_list = the_quesition_list.get(i).getAnswers();
            textlist2 = new ArrayList<>();
            for (int j = 0; j < the_answer_list.size(); j++) {

                ans_view = xInflater.inflate(R.layout.answer_layout, null);
                TextView txt_ans = (TextView) ans_view.findViewById(R.id.txt_answer_item);
                TextView tv_menu = (TextView) ans_view.findViewById(R.id.tv_menu);

                //自己手動爲每個問題的選項加上相應的ABCD...
                if (j == 0) {
                    tv_menu.setText("A");
                } else if (j == 1) {
                    tv_menu.setText("B");
                } else if (j == 2) {
                    tv_menu.setText("C");
                } else if (j == 3) {
                    tv_menu.setText("D");
                } else if (j == 4) {
                    tv_menu.setText("E");
                } else if (j == 5) {
                    tv_menu.setText("F");
                } else if (j == 6) {
                    tv_menu.setText("G");
                }
                // 判斷哪個答案已選
                if (the_answer_list.get(j).getAns_state() == 1) {
                    Toast.makeText(getApplicationContext(), "1", Toast.LENGTH_SHORT).show();
                    the_quesition_list.get(i).setQue_state(1);
                    tv_menu.setBackgroundDrawable(getResources().getDrawable(R.drawable.shape_red));
                    tv_menu.setTextColor(getResources().getColor(R.color.colorWhite));
                } else {
                    Toast.makeText(getApplicationContext(), "0", Toast.LENGTH_SHORT).show();
                    tv_menu.setBackgroundDrawable(getResources().getDrawable(R.drawable.shape_white));
                    tv_menu.setTextColor(getResources().getColor(R.color.colorblack));
                }

                textlist2.add(tv_menu);
                txt_ans.setText(the_answer_list.get(j).getAnswer_content());
                LinearLayout lly_answer_size = (LinearLayout) ans_view.findViewById(R.id.lly_answer_size);

                if (j % 2 != 0) {//爲了美觀了,將答案的背景隔開一下
                    lly_answer_size.setBackgroundColor(getResources().getColor(R.color.colorWhite));
                }
                //設置點擊事件
                lly_answer_size.setOnClickListener(new answerItemOnClickListener(i, j, the_answer_list, txt_ans));
                add_layout.addView(ans_view);
            }
            textlist.add(textlist2);

            test_layout.addView(que_view);//將生成的問題都添加到一個佈局文件中
        }
    }

    /**
     * 試卷各個選項的點擊事件
     */
    class answerItemOnClickListener implements View.OnClickListener {
        private int i;
        private int j;
        private TextView txt;
        private ArrayList<Answer> the_answer_lists;

        public answerItemOnClickListener(int i, int j, ArrayList<Answer> the_answer_list, TextView text) {
            this.i = i;
            this.j = j;
            this.the_answer_lists = the_answer_list;
            this.txt = text;
        }

        // 實現點擊選項後改變選中狀態以及對應圖片
        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            // 判斷當前問題是單選還是多選
            if (the_quesition_list.get(i).getType().equals("3")) {//1選擇題;2判斷題 3不定項

                for (int z = 0; z < the_answer_list.size(); z++) {
                    if (the_answer_list.get(z).getAns_state() == 1) {
                        the_quesition_list.get(i).setQue_state(1);
//                        return;
                    } else {
                        the_quesition_list.get(i).setQue_state(0);
                    }
                }
                if (the_answer_lists.get(j).getAns_state() == 0) {
//                    Toast.makeText(getApplication(), "0", Toast.LENGTH_SHORT).show();
                    textlist.get(i).get(j).setBackgroundDrawable(getResources().getDrawable(R.drawable.shape_red));
                    textlist.get(i).get(j).setTextColor(getResources().getColor(R.color.colorWhite));
                    the_answer_lists.get(j).setAns_state(1);
                    the_quesition_list.get(i).setQue_state(1);
                } else {
//                    Toast.makeText(getApplication(), "1", Toast.LENGTH_SHORT).show();
                    textlist.get(i).get(j).setBackgroundDrawable(getResources().getDrawable(R.drawable.shape_white));
                    textlist.get(i).get(j).setTextColor(getResources().getColor(R.color.colorblack));
                    the_answer_lists.get(j).setAns_state(0);
                    the_quesition_list.get(i).setQue_state(0);
                }
            } else {// 單選
                for (int z = 0; z < the_answer_lists.size(); z++) {
                    if (z == j) {
//                        Toast.makeText(getApplication(), "3", Toast.LENGTH_SHORT).show();
                        // 如果當前未被選中
                        textlist.get(i).get(j).setBackgroundDrawable(getResources().getDrawable(R.drawable.shape_red));
                        textlist.get(i).get(j).setTextColor(getResources().getColor(R.color.colorWhite));
                        the_answer_lists.get(z).setAns_state(1);
                        the_quesition_list.get(i).setQue_state(1);
                    } else {
//                        Toast.makeText(getApplication(), "4", Toast.LENGTH_SHORT).show();
                        the_answer_lists.get(z).setAns_state(0);
                        the_quesition_list.get(i).setQue_state(1);
                        textlist.get(i).get(z).setBackgroundDrawable(getResources().getDrawable(R.drawable.shape_white));
                        textlist.get(i).get(z).setTextColor(getResources().getColor(R.color.colorblack));
                    }
                }
            }
        }
    }

    /**
     * 提交按鈕事件處理
     */
    class submitOnClickListener implements View.OnClickListener {

        private Page page;

        public submitOnClickListener(Page page) {
            this.page = page;
        }

        @Override
        public void onClick(View arg0) {
            // TODO Auto-generated method stub
            // 判斷是否答完題
            boolean isState = true;
            // 最終要的json數組
            JSONArray jsonArray = new JSONArray();
            // 點擊提交的時候,先判斷狀態,如果有未答完的就提示,如果沒有再把每條答案提交(包含問卷ID 問題ID 及答案ID)
            // 注:不用管是否是一個問題的答案,就以答案的個數爲準來提交上述格式的數據
            for (int i = 0; i < the_quesition_list.size(); i++) {
                the_answer_list = the_quesition_list.get(i).getAnswers();
                // 判斷是否有題沒答完
                if (the_quesition_list.get(i).getQue_state() == 0) {
                    Toast.makeText(getApplicationContext(), "您第" + (i + 1) + "題沒有答完", Toast.LENGTH_LONG).show();
                    jsonArray = null;
                    isState = false;
                    return;
                } else {
                    JSONObject json = new JSONObject();
                    String answers2 = "";
                    String answers = "";
                    for (int j = 0; j < the_answer_list.size(); j++) {
                        if (the_answer_list.get(j).getAns_state() == 1) {
                            try {
                                answers2 = the_quesition_list.get(i).getQuesitionId();
                                if (answers.length() == 0) {
                                    answers = answers + j;
                                } else {
                                    answers = answers + "-" + j;
                                }

                                //===爲不定項拼接答案================================
                                if (answers.contains("0")) {
                                    answers = answers.replace("0", "A");
                                }
                                if (answers.contains("1")) {
                                    answers = answers.replace("1", "B");
                                }
                                if (answers.contains("2")) {
                                    answers = answers.replace("2", "C");
                                }
                                if (answers.contains("3")) {
                                    answers = answers.replace("3", "D");
                                }
                                if (answers.contains("4")) {
                                    answers = answers.replace("4", "E");
                                }
                                if (answers.contains("5")) {
                                    answers = answers.replace("5", "F");
                                }
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                    }
                    try {
                        json.put("answer", answers);
                        json.put("eid", answers2);
//                        Toast.makeText(getApplicationContext(), json + "", Toast.LENGTH_SHORT).show();
                        jsonArray.put(json);
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
            }
            Log.d("jsonArray-->", "" + jsonArray);
            Toast.makeText(getApplicationContext(), "提交的數據:" + jsonArray, Toast.LENGTH_SHORT).show();
        }
    }
}

試卷類

public class Page {
    //問卷id
    private String pageId;
    //問卷狀態
    private String status;
    //問卷主題
    private String title;
    //題目
    private ArrayList<Quesition> quesitions;

    public ArrayList<Quesition> getQuesitions() {
        return quesitions;
    }

    public void setQuesitions(ArrayList<Quesition> quesitions) {
        this.quesitions = quesitions;
    }

    public String getPageId() {
        return pageId;
    }

    public void setPageId(String pageId) {
        this.pageId = pageId;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}

問題類

public class Quesition {
    //題目id
    private String quesitionId;
    //單選多選標識
    private String type;//0 單選 1 多選
    //題目
    private String content;
    //選項
    private ArrayList<Answer> answers;
    //是否解答
    private int que_state;

    public int getQue_state() {
        return que_state;
    }

    public void setQue_state(int que_state) {
        this.que_state = que_state;
    }

    public String getQuesitionId() {
        return quesitionId;
    }

    public void setQuesitionId(String quesitionId) {
        this.quesitionId = quesitionId;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public ArrayList<Answer> getAnswers() {
        return answers;
    }

    public void setAnswers(ArrayList<Answer> answers) {
        this.answers = answers;
    }
}

答案類

public class Answer {
    //答案id
    private String answerId;
    //答案主體
    private String answer_content;
    //答案是否被解答
    private int ans_state;

    public int getAns_state() {
        return ans_state;
    }

    public void setAns_state(int ans_state) {
        this.ans_state = ans_state;
    }

    public String getAnswerId() {
        return answerId;
    }

    public void setAnswerId(String answerId) {
        this.answerId = answerId;
    }

    public String getAnswer_content() {
        return answer_content;
    }

    public void setAnswer_content(String answer_content) {
        this.answer_content = answer_content;
    }
}

需要完整Demo聯繫QQ:1242918242

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