android:
id="@+id/action_settings5"
android:
orderInCategory="100"
android:
showAsAction="never"
android:
title="@string/action_settings5"/>
菜单文字等内容如下XML文件:
xmlversion="1.0"encoding="utf-8"?
>
信息一类客观题测试
交卷
查询
帮助
关于
关闭
世界你好!
√
|<
<<
>|
>>
?
三、试题源,我将其放在arrays.xml文件中,简图见下:
共内容太多,占一万多行(当然这是根据题的多少而定的),下面仅将部分内容贴出。
1.单选题
2.多选题
3.判断题
4.填空题
四、源代码如下:
packagecom.ltj.zjdkgktest;
importjava.util.ArrayList;
importjava.util.Random;
importandroid.os.Bundle;
importandroid.app.Activity;
importandroid.app.AlertDialog;
importandroid.content.Context;
importandroid.database.Cursor;
importandroid.database.sqlite.SQLiteDatabase;
importandroid.database.sqlite.SQLiteOpenHelper;
importandroid.graphics.Color;
importandroid.view.GestureDetector;
importandroid.view.GestureDetector.OnGestureListener;
importandroid.view.Gravity;
importandroid.view.Menu;
importandroid.view.MenuItem;
importandroid.view.MotionEvent;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.widget.Button;
importandroid.widget.CheckBox;
importandroid.widget.EditText;
importandroid.widget.SeekBar;
importandroid.widget.TextView;
importandroid.widget.Toast;
publicclassMainActivityextendsActivityimplementsOnGestureListener{
privateTextViewtvQuestion,tvStandard;//问题及标准答案文本框
privateCheckBoxchkOptionA,chkOptionB,chkOptionC,chkOptionD;//四个复选框分别记录客观题的四个或两个备选答案
privateButtonbtnAnswerOk;//确认填空题答案
privateButtonbtnFirst,btnPrev,btnNext,btnLast;//四个导航按钮,依次为第一、上一、下一和最后
privateButtonbtnShowOrHide;//显示或隐藏标准答案显示,仅在交卷后才能够起作用
privateEditTextetWriteBlank;//填写答案的文本编辑框
privateSeekBarsbNavigationBar;//导航条
privateString[]singleQuestions;//读取全部单选题
privateString[][]singleOptions;//读取全部单选题的四个备选答案
privateString[]singleStandards;//读取全部单选题的标准答案
privateString[]multiQuestions;//读取全部多选题
privateString[][]multiOptions;//读取全部多选题的四个备选答案
privateString[]multiStandards;//读取全部多选题的标准答案
privateString[]judgeQuestions;//读取全部判断题
privateString[]judgeStandards;//读取全部判断题的标准答案
privateString[]blankQuestions;//读取全部填空题
privateString[]blankStandards;//读取全部填空题的标准答案
privateintsingleTotal,multiTotal,judgeTotal,blankTotal;//各类题型分别的题量
privateintsingleRandom,multiRandom,judgeRandom,blankRandom;//各种题型应抽取的题量值
privateintrandomFirst,randomSecond,randomThird,randomFourth;//各类题型的界定范围值
privateString[]randomQuestions;//随机产生的题目放置的数组
privateString[][]randomOptions;//随机产生对应题目的四个备选项的数组
privateString[]randomStandards;//随机产生对应题目的标准答案
privateString[]yourAnswers;//考试者回答的答案
privateint[]yourScores;//评判后对应题目的成绩
privateintcurrentRecord;//当前题目所在的序号:
从0开始的,直到randomFourth-1
privatebooleansubmitYesOrNo;//是否提交,如果提交了,“?
”号按钮才可用,以显示或隐藏各题答案。
privatebooleananswerShowOrHide;//标准答案是显示还是隐藏状态,以上两个同时为真时,才显示标准答案
privateTestDbHelpermyOpenHelper;//定义一个内部类的对象——TestDbHelper的对象
privateGestureDetectorgd;//
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.initAllWidgets();//初始化各个控件
this.initReadArrayData();//读取各类题型的题目、备选项、标准答案
intrandomTotal=this.initRandomVarables();//初始化各类题型随机抽取的题量,各类题型的界定范围
this.initRandomArrays(randomTotal);//初始化将要用到的随机数组
this.randomExtractSingle(0,this.singleRandom,this.singleTotal);//随机抽取单选题
this.randomExtractMulti(this.randomFirst,this.multiRandom,
this.multiTotal);//随机抽多选题
this.randomExtractJudge(this.randomSecond,this.judgeRandom,
this.judgeTotal);//随机抽判断题
this.randomExtractBlank(this.randomThird,this.blankRandom,
this.blankTotal);//随机抽判断题
this.sbNavigationBar
.setOnSeekBarChangeListener(newSeekBar.OnSeekBarChangeListener(){
@Override
publicvoidonProgressChanged(SeekBararg0,intarg1,
booleanarg2){
//拖动导航条时调用
currentRecord=arg1;//当前记录号与导航条进度数一致
showEachQuestion(currentRecord);//调用显示每一个问题的事件
}
@Override
publicvoidonStartTrackingTouch(SeekBararg0){
//拖动导航条开始时调用
}
@Override
publicvoidonStopTrackingTouch(SeekBararg0){
//拖动导航条停止时调用
}
});
this.btnShowOrHide.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewarg0){
//按钮显示隐藏标准答案的按钮的单击事件
answerShowOrHide=!
answerShowOrHide;//原来隐藏,则后显示,如果原为显示,则这时会显示
if(!
answerShowOrHide){
btnShowOrHide.setText("显示");//设置按钮上的文本
tvStandard.setVisibility(View.INVISIBLE);//标准答案文本框不显示
}else{
btnShowOrHide.setText("隐藏");
tvStandard.setVisibility(View.VISIBLE);//标准答案文本框显示
}
}
});
this.btnFirst.setOnClickListener(newButton.OnClickListener(){
@Override
publicvoidonClick(Viewarg0){
//到首记录的按钮事件
sbNavigationBar.setProgress(currentRecord=0);//导航条移到0
}
});
this.btnPrev.setOnClickListener(newButton.OnClickListener(){
@Override
publicvoidonClick(Viewarg0){
//到上一记录的按钮事件
if(currentRecord>0){
sbNavigationBar.setProgress(--currentRecord);//导航条上移一条,记录号减1
}
}
});
this.btnLast.setOnClickListener(newButton.OnClickListener(){
@Override
publicvoidonClick(Viewarg0){
//到末记录的按钮事件
sbNavigationBar.setProgress(currentRecord=randomFourth-1);//导航条移到最后
}
});
this.btnNext.setOnClickListener(newButton.OnClickListener(){
@Override
publicvoidonClick(Viewarg0){
//到下一记录的按钮事件
if(currentRecordsbNavigationBar.setProgress(++currentRecord);//导航条下移一条,记录号加1
}
}
});
this.chkOptionA.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewarg0){
//复选框A的单击事件,分单选、多选和判断而不同
allCheckBoxHandle
(1);//点击第一个复选框时,调用时用参数1
}
});
this.chkOptionB.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewarg0){
//复选框B的单击事件,分单选、多选和判断而不同
allCheckBoxHandle
(2);//点击第一个复选框时,调用时用参数2
}
});
this.chkOptionC.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewarg0){
//复选框C的单击事件,分单选、多选和判断而不同
allCheckBoxHandle(3);//点击第一个复选框时,调用时用参数3
}
});
this.chkOptionD.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewarg0){
//复选框D的单击事件,分单选、多选和判断而不同
allCheckBoxHandle(4);//点击第一个复选框时,调用时用参数4
}
});
this.btnAnswerOk.setOnClickListener(newOnClickListener(){
@Override
publicvoidonClick(Viewarg0){
//填空题的答案填写好后,单击此按钮则记录其中答案于对于数组yourAnswers中
StringtmpYours=etWriteBlank.getText().toString().trim();//取出你填写的答案的内容,并去前后空格
StringtmpStandard=randomStandards[currentRecord];//取出对应的标准答案
yourAnswers[currentRecord]=tmpYours;//将填写的答案记入你的答案中,以备下次到此处时,原来的内容在
if(tmpYours.equalsIgnoreCase(tmpStandard)){//忽略大小写,相等则给你成绩为3分,否则对应的记为0分
yourScores[currentRecord]=3;//记上3分
}else{
yourScores[currentRecord]=0;//记0分
}
}
});
this.sbNavigationBar.setMax(this.randomFourth-1);//设置导航条的最大值为全部题量值减去1
this.sbNavigationBar.setProgress(0);//设置导航条初始值为0
}
protectedvoidallCheckBoxHandle(intwho){
//处理复选框单击后要做的事情,who为按钮序号
intp=currentRecord;//当前记录位置
if(pthis.chkOptionA.setChecked(false);//在单击一个复选框时,设置所有复选框均为不选中状态,再根据参数who决定哪一个被选中
this.chkOptionB.setChecked(false);
this.chkOptionC.setChecked(false);
this.chkOptionD.setChecked(false);
switch(who){//根据单击复选框时传递的序号,判断哪个复选框应该处于选中状态
case1:
this.chkOptionA.setChecked(true);
break;
case2:
this.chkOptionB.setChecked(true);
break;
case3:
this.chkOptionC.setChecked(true);
break;
case4:
this.chkOptionD.setChecked(true);
break;
}
intrightAnswer=Integer.parseInt(this.randomStandards[p]);//取出标准答案的序号
this.yourAnswers[p]=""+who;//记录你当前题目的答案值于数组yourAnswers中
if(rightAnswer==who){//如果你的点击的复选框序号与标准答案的序号值一样
this.yourScores[p]=3;//记3分
}else{
this.yourScores[p]=0;//否则不得分,记为0
}
}elseif(pStringmultiAnswer="";//用于暂时记录内容
multiAnswer=(this.chkOptionA.isChecked()?
"1":
"0")
+(this.chkOptionB.isChecked()?
"1":
"0")
+(this.chkOptionC.isChecked()?
"1":
"0")
+(this.chkOptionD.isChecked()?
"1":
"