Android 答题App

答题APP,之前有个简单的单选题答题需求,我这里简单阐述下思路,完整的demo可以下载查看。
源码联系我V Runbo_Better

在这里插入图片描述

1.数据源

问题大类包含若干问题,问题下面包含多个选项,用rightTag标记出正确答案

[
  {
    "id": 1,
    "name": "Asia", //题目名称
    "questionList": [ //问题列表
      {
        "title": "What’s the FULL name of China?", //题目描述
        "rightTag": "B", //正确答案
        "optionList": [ //选项列表
          {
            "tag": "A", //选项
            "value": "he United Kingdom of China" //选项描述
          },
          {
            "tag": "B",
            "value": "The People’s Republic of China"
          },
          {
            "tag": "C",
            "value": "The United Province of China"
          },
          {
            "tag": "D",
            "value": "The Freedom of China"
          }
      	]
			}
      ...
      更多问题
    ]
	}
  ...
  更多类别
]
2.界面设计

用一个Activity加载,每答完一题就刷新一下页面,将下一题的内容显示出来

题目描述
<TextView>

单选组
<RadioGroup>
	选项
	<RadioButton>
	...
</RadioGroup>

下一题/完成
<Button>

3.监听事件

监听RadioGroup的OnCheckedChangeListener事件

private RadioGroup.OnCheckedChangeListener onCheckedChangeListener = new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            switch (checkedId) {
                case R.id.rBtnA:
                    answer("A");
                    break;
              	...
            }
        }
    };
4.记录分数

选择选项之后,与正确答案做比较,答对加分

if (currentQuestion.getRightTag().equals(answer)) {
    score.setScore(score.getScore() + 1);
    score.save();
}

currentQuestion:当前问题Object

answer: A、B、C、D

score:一个bean类,用来记录分数,该类继承自LitePalSupport,因此也是一张数据库表,同时拥有数据库增删改查功能(注意:这是Litepal框架的功能)

其中userId是用户表中的id,demo也有登录和注册功能,也是通过数据库实现

questionId是问题id,记录每个问题的作答情况

public class Score extends LitePalSupport implements Comparable<Score> {
    private int id;//主键
    private int questionId;
    private int userId;
    private String name;
    private int score;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getQuestionId() {
        return questionId;
    }

    public void setQuestionId(int questionId) {
        this.questionId = questionId;
    }

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    @Override
    public int compareTo(Score o) {
        return  o.getScore() - this.score;
    }

}

实现Comparable接口,用于再答完所有题目之后,比较自己的分数排名

5.其他-Adapter Filterable用法示例

demo中还有个模块通过retrofit网络请求,将请求到的集合显示到recyclerview当中,在recyclerview的adapter中,实现Filterable接口,重写getFilter方法,根据传入的字符串进行过滤筛选,同时实现自定义的排序,例如首字母A-Z排序或者Z-A排序等。这部分代码主要在CountryAdapter.java里面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Code王工

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值