GeoQuiz主要功能是:
- 用户通过点击“正确”或“错误”按钮回答屏幕上显示的判断题,并根据Toast出的信息检查自己的答案是否正确;
- 通过点击“上一题”或“下一题”切换题目;
- 该应用还提供了作弊功能,当用户点击“作弊”按钮时,应用会告诉你正确答案,但通过作弊手段得到正确答案的题目将在用户回答该问题时Toast出“作弊是不对的”的信息;
一、 答题界面的activity和它的布局介绍
1、引用资源
图片资源作为切换题目按钮的资源,保存于res/drawable中
字符串资源用来保存题目的内容等,保存于res/values/strings.xml中
2、答题界面的布局
图1对应的XML被放在res/layout文件夹中,图2对应的XML被放在res/layout-land文件夹中,这两个XML的名称相同,它们只是不同方向布局的不同呈现。
所有带layout前缀的属性,它都表示该控件相对于它的父控件的位置,而不带layout的属性则表示该控件自身的内容相对于该控件的位置。
3、控制答题界面的activity(主activity)
保存题目的TrueFalse类
首先,我们需要一个能保存每一道题目信息的类,该类就是一个简单的DTO对象,包含三个成员变量,分别用于存储题目、答案、用户是否做过弊QuizActivity类(主activity)
UI控件中的AlertDialog:AlertDialog用到了所谓的建造者(Builder)模式。对话框是一个可以高度定制的UI控件,我们可以设置它的抬头,背景,标题,子标题,内容,确定和取消的按钮等,若用常规的初始化方法将dialog初始化,那构造函数的参数就得写上好几行,而且有些内容可设可不设,那么就要重载N多个构造方法,所以不妨对dialog的每一部分都设置一个方法,这样就可以有选择的构造每一部分,构造方法也不必是好几行了。
onSaveInstanceState(),这个方法和activity的生命周期有关:在一个activity实例被销毁之前,都要回调onPause()、onStop()、onDestory()方法,因为系统一般不会销毁正在onResume的activity,而可能会回收处于暂停或停止状态的activity对象,所以onSaveInstanceState()方法被回调的时刻有可能是在onPause()被调用之后,或者onStop()被调用之后。
二、 作弊界面的activity和它的布局介绍
1、布局介绍
2、作弊界面的activity
该activity接收主activity传过来的答案信息,同时通过setResult()的bundle携带“用户是否触发了作弊按钮”信息回传给主activity