展示效果图

1:准备工作

2.

<?xml version="1.0" encoding="utf-8"?>

                                                
3.![在这里插入图片描述](https://img-blog.csdnimg.cn/20181217202445728.png) package com.example.a41119.standardtest;

import android.app.Activity;
import android.app.AlertDialog;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.CheckBox;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;

import java.util.ArrayList;

public class MainActivity extends Activity {

private LinearLayout llSingleChoice;private LinearLayout llMultipleChoice;private LinearLayout llJudgement;private TextView tvStem;private RadioGroup rgSingleChoice;private RadioButton rbSingleA;private RadioButton rbSingleB;private RadioButton rbSingleC;private RadioButton rbSingleD;private RadioGroup rgJudgement;private RadioButton rbJudgementT;private RadioButton rbJudgementF;private CheckBox cbMultipleA;private CheckBox cbMultipleB;private CheckBox cbMultipleC;private CheckBox cbMultipleD;private ArrayList questions;private int questionIndex;private String[] answers;private String answer;@Overrideprotected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    // 利用布局资源文件设置用户界面    setContentView(R.layout.activity_main);    // 通过资源标识获得控件实例    llSingleChoice = findViewById(R.id.ll_single_choice);    llMultipleChoice = findViewById(R.id.ll_multiple_choice);    llJudgement = findViewById(R.id.ll_judgement);    tvStem = findViewById(R.id.tv_stem);    rgSingleChoice = findViewById(R.id.rg_single_choice);    rbSingleA = findViewById(R.id.rb_single_a);    rbSingleB = findViewById(R.id.rb_single_b);    rbSingleC = findViewById(R.id.rb_single_c);    rbSingleD = findViewById(R.id.rb_single_d);    rgJudgement = findViewById(R.id.rg_judgement);    rbJudgementT = findViewById(R.id.rb_judgement_t);    rbJudgementF = findViewById(R.id.rb_judgement_f);    cbMultipleA = findViewById(R.id.cb_multiple_a);    cbMultipleB = findViewById(R.id.cb_multiple_b);    cbMultipleC = findViewById(R.id.cb_multiple_c);    cbMultipleD = findViewById(R.id.cb_multiple_d);    // 初始化试题库    questions = getQuestions();    // 实例化答案数组    answers = new String[questions.size()];    // 取出第1题    Question question = questions.get(questionIndex);    // 根据题型设置界面    setInterfaceByType(question);}private ArrayList getQuestions() {    ArrayList questions = new ArrayList<>();    // 创建第1题    Question question = new Question();    question.setId(1);    question.setStem("驾驶机动车在道路上违反道路交通安全法的行为,属于什么行为?");    question.setA("违章行为");    question.setB("违法行为");    question.setC("过失行为");    question.setD("违规行为");    question.setType(1);    question.setAnswer("B");    // 将第1题添加到试题库    questions.add(question);    // 创建第2题    question = new Question();    question.setId(2);    question.setStem("交通信号包括交通信号灯、交通标志、交通标线和交通警察的指挥。");    question.setA("正确");    question.setB("错误");    question.setC("");    question.setD("");    question.setType(3);    question.setAnswer("A");    // 将第2题添加到试题库    questions.add(question);    // 创建第3题    question = new Question();    question.setId(3);    question.setStem("机动车驾驶人违法驾驶造成重大交通事故构成犯罪的,依法追究什么责任?");    question.setA("刑事责任");    question.setB("民事责任");    question.setC("经济责任");    question.setD("直接责任");    question.setType(1);    question.setAnswer("A");    // 将第3题添加到试题库    questions.add(question);    // 创建第4题    question = new Question();    question.setId(4);    question.setStem("钱某驾驶大型卧铺客车,乘载45人(核载40人),保持40公里/小时以上的车速行至八宿县境内连续下坡急转弯路段处,翻下100米深的山崖,造成17人死亡、20人受伤。钱某的主要违法行为是什么?");    question.setA("驾驶时接听手持电话");    question.setB("超速行驶");    question.setC("客车超员");    question.setD("疲劳驾驶");    question.setType(2);    question.setAnswer("BC");    // 将第4题添加到试题库    questions.add(question);    // 创建第5题    question = new Question();    question.setId(5);    question.setStem("邹某驾驶大型卧铺客车(核载35人,实载47人),行至京港澳高速公路938公里时,因乘车人携带的大量危险化学品在车厢内突然发生爆燃,造成41人死亡,6人受伤。此事故中的主要违法行为是什么?");    question.setA("客车超员");    question.setB("乘车人携带易燃易爆危险物品");    question.setC("超速行驶");    question.setD("不按规定停车");    question.setType(2);    question.setAnswer("AB");    // 将第5题添加到试题库    questions.add(question);    return questions;}/** * 根据题型设置界面 * * @param question */private void setInterfaceByType(Question question) {    // 判断题型,选择界面    switch (question.getType()) {        case 1:            llSingleChoice.setVisibility(View.VISIBLE);            llMultipleChoice.setVisibility(View.INVISIBLE);            llJudgement.setVisibility(View.INVISIBLE);            tvStem.setText("[单选] " + question.getId() + ". " + question.getStem());            tvStem.setTextColor(Color.RED);            rbSingleA.setText(question.getA());            rbSingleB.setText(question.getB());            rbSingleC.setText(question.getC());            rbSingleD.setText(question.getD());            // 清空控件选中状态            rbSingleA.setChecked(false);            rbSingleB.setChecked(false);            rbSingleC.setChecked(false);            rbSingleD.setChecked(false);            rgSingleChoice.check(-1);            answer = answers[questionIndex];            if (answer != null) {                // 根据用户答案来设定单选按钮状态                switch (answer) {                    case "A":                        rbSingleA.setChecked(true);                        break;                    case "B":                        rbSingleB.setChecked(true);                        break;                    case "C":                        rbSingleC.setChecked(true);                        break;                    case "D":                        rbSingleD.setChecked(true);                        break;                }            }            break;        case 2:            llMultipleChoice.setVisibility(View.VISIBLE);            llSingleChoice.setVisibility(View.INVISIBLE);            llJudgement.setVisibility(View.INVISIBLE);            tvStem.setText("[多选] " + question.getId() + ". " + question.getStem());            tvStem.setTextColor(Color.BLACK);            cbMultipleA.setText(question.getA());            cbMultipleB.setText(question.getB());            cbMultipleC.setText(question.getC());            cbMultipleD.setText(question.getD());            // 清空控件选中状态            cbMultipleA.setChecked(false);            cbMultipleB.setChecked(false);            cbMultipleC.setChecked(false);            cbMultipleD.setChecked(false);            answer = answers[questionIndex];            if (answer != null) {                for (int i = 0; i < answer.length(); i++) {                    switch (answer.charAt(i)) {                        case 'A':                            cbMultipleA.setChecked(true);                            break;                        case 'B':                            cbMultipleB.setChecked(true);                            break;                        case 'C':                            cbMultipleC.setChecked(true);                            break;                        case 'D':                            cbMultipleD.setChecked(true);                            break;                    }                }            }            break;        case 3:            llJudgement.setVisibility(View.VISIBLE);            llSingleChoice.setVisibility(View.INVISIBLE);            llMultipleChoice.setVisibility(View.INVISIBLE);            tvStem.setText("[判断] " + question.getId() + ". " + question.getStem());            tvStem.setTextColor(Color.BLUE);            // 清空控件选中状态            rbJudgementT.setChecked(false);            rbJudgementF.setChecked(false);            rgJudgement.check(-1);            // 根据用户答案来设定单选按钮状态            answer = answers[questionIndex];            if (answer != null) {                switch (answer) {                    case "A":                        rbJudgementT.setChecked(true);                        break;                    case "B":                        rbJudgementF.setChecked(true);                        break;                }            }    }}/** * 退出 * * @param view */public void doExit(View view) {    finish();}/** * 上一题 * * @param view */public void doPrevious(View view) {    // 判断用户是否做了本题    switch (questions.get(questionIndex).getType()) {        case 1:            if (rbSingleA.isChecked() || rbSingleB.isChecked() || rbSingleC.isChecked() || rbSingleD.isChecked()) {                saveAnswer();            }            break;        case 2:            if (cbMultipleA.isChecked() || cbMultipleB.isChecked() || cbMultipleC.isChecked() || cbMultipleD.isChecked()) {                saveAnswer();            }            break;        case 3:            if (rbJudgementT.isChecked() || rbJudgementF.isChecked()) {                saveAnswer();            }            break;    }    if (questionIndex > 0) {        questionIndex--;    } else {        questionIndex = questions.size() - 1;    }    // 根据题型设置界面    setInterfaceByType(questions.get(questionIndex));}/** * 下一题 * * @param view */public void doNext(View view) {    // 判断用户是否做了本题    switch (questions.get(questionIndex).getType()) {        case 1:            if (rbSingleA.isChecked() || rbSingleB.isChecked() || rbSingleC.isChecked() || rbSingleD.isChecked()) {                saveAnswer();            }            break;        case 2:            if (cbMultipleA.isChecked() || cbMultipleB.isChecked() || cbMultipleC.isChecked() || cbMultipleD.isChecked()) {                saveAnswer();            }            break;        case 3:            if (rbJudgementT.isChecked() || rbJudgementF.isChecked()) {                saveAnswer();            }            break;    }    Log.d("test", (questionIndex + 1) + answers[questionIndex]);    if (questionIndex < questions.size() - 1) {        questionIndex++;    } else {        questionIndex = 0;    }    // 根据题型设置界面    setInterfaceByType(questions.get(questionIndex));}/** * 提交按钮单击事件处理方法 * * @param view */public void doSubmit(View view) {    // 保存当前题目答案    saveAnswer();    // 计算成绩点    int points = 0;    for (int i = 0; i < questions.size(); i++) {        if (null != answers[i]) {            if (answers[i].equals(questions.get(i).getAnswer())) {                points++;            }        }    }    // 按百分制来折算分数    double score = points * 100 / questions.size();    // 根据分数给出评语    String comment = "";    if (score >= 90) {        comment = "分数:" + score + "\n评语:棒棒哒~";    } else if (score >=60) {        comment = "分数:" + score + "\n评语:还行吧!";    } else {        comment = "分数:" + score + "\n评语:好好干吧!";    }    // 利用警告对话框来显示测试结果    AlertDialog.Builder builder = new AlertDialog.Builder(this);    builder.setIcon(R.mipmap.ic_launcher_round)            .setTitle("测试结果")            .setMessage(comment)            .setPositiveButton("确定", null)            .create()            .show();}/** * 保存用户选择的答案 */private void saveAnswer() {    switch (questions.get(questionIndex).getType()) {        case 1: // 单选题            if (rbSingleA.isChecked()) {                answers[questionIndex] = "A";            } else if (rbSingleB.isChecked()) {                answers[questionIndex] = "B";            } else if (rbSingleC.isChecked()) {                answers[questionIndex] = "C";            } else {                answers[questionIndex] = "D";            }            break;        case 2: // 多选题            StringBuilder builder = new StringBuilder();            if (cbMultipleA.isChecked()) {                builder.append("A");            }            if (cbMultipleB.isChecked()) {                builder.append("B");            }            if (cbMultipleC.isChecked()) {                builder.append("C");            }            if (cbMultipleD.isChecked()) {                builder.append("D");            }            answers[questionIndex] = builder.toString();            break;        case 3: // 判断题            if (rbJudgementT.isChecked()) {                answers[questionIndex] = "A";            } else {                answers[questionIndex] = "B";            }            break;    }}

}
4
.
package com.example.a41119.standardtest;

/**

  • Created by howard2005 on 2018-12-05.
    */

public class Question {
/**
* 编号
/
private int id;
/
*
* 题干
/
private String stem;
/
*
* A选项
/
private String a;
/
*
* B选项
/
private String b;
/
*
* C选项
/
private String c;
/
*
* D选项
/
private String d;
/
*
* 题型
* 1 - 单选题
* 2 - 多选题
* 3 - 判断题
/
private int type;
/
*
* 答案
*/
private String answer;

public int getId() {    return id;}public void setId(int id) {    this.id = id;}public String getStem() {    return stem;}public void setStem(String stem) {    this.stem = stem;}public String getA() {    return a;}public void setA(String a) {    this.a = a;}public String getB() {    return b;}public void setB(String b) {    this.b = b;}public String getC() {    return c;}public void setC(String c) {    this.c = c;}public String getD() {    return d;}public void setD(String d) {    this.d = d;}public int getType() {    return type;}public void setType(int type) {    this.type = type;}public String getAnswer() {    return answer;}public void setAnswer(String answer) {    this.answer = answer;}

}
5.

<?xml version="1.0" encoding="utf-8"?>

                                                                                                                                                                    
6.![在这里插入图片描述](https://img-blog.csdnimg.cn/20181217202621588.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2xpdTE3MjM0MDUw,size_16,color_FFFFFF,t_70)

如下:

标准化测试程序
正确
错误
上一题
下一题
提交
退出

更多相关文章

  1. android SQLiteOpenHelper 对SQLite的操作
  2. android 上下左右手势判断 根据别人的改的
  3. Android根据包名获取程序基本信息
  4. Android(安卓)工具代码
  5. Android自动化工具Monkeyrunner使用(六) —— 根据ID查找对象
  6. Android:根据上下文Context获取Activity
  7. Android根据Button状态(normal,focused,pressed)显示不同背景图
  8. 根据文本生成位图
  9. android C++ 和 jni,根据JNIEnv的FindClass获取java类,包括多线程

随机推荐

  1. android:gravity / android:layout_Gravi
  2. xml字段含义
  3. 在程序中设置android:gravity 和 android
  4. mk中的android:sharedUserId和LOCAL_CERT
  5. Android在走下坡路吗?
  6. Android(安卓)官方命令深入分析之android
  7. android 文件读取
  8. android高级应用课程
  9. android (4)控件的xml属性
  10. android adb 命令