我做了一个测验申请,其中包括5个问题。我创建了一个ResultActivity页面,显示测验结果。
现在我想为每个问题添加一个20秒的countDown计时器。倒数计时器结束后,它会自动转到下一个问题。问题完成后,应移至ResultActivity页面以显示结果。
我不知道如何在其中添加倒数计时器。
这是我的代码:
QuizActivity.java
package com.example.triviality;
import java.util.LinkedHashMap;
import java.util.List;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.app.Activity;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;
public class QuizActivity extends Activity {
List<Question> quesList;
public static int score,correct,wrong,wronganswers;
public boolean isCorrect;
static int qid=0;
int totalCount=5;
Question currentQ;
TextView txtQuestion;
RadioGroup radioGroup1;
RadioButton rda, rdb, rdc;
Button butNext;
TextView rt;
boolean nextFlag =false;
boolean isTimerFinished = false;
static LinkedHashMap lhm = new LinkedHashMap();
MyCountDownTimer countDownTimer = new MyCountDownTimer(10000 /*20 Sec*/, 1000);
//final MyCountDownTimer timer = new MyCountDownTimer(20000,1000);
public static String[] Correctanswers = new String[5];
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_quiz);
DbHelper db=new DbHelper(this);
quesList=db.getAllQuestions();
currentQ=quesList.get(qid);
txtQuestion=(TextView)findViewById(R.id.textView1);
rda=(RadioButton)findViewById(R.id.radio0);
rdb=(RadioButton)findViewById(R.id.radio1);
rdc=(RadioButton)findViewById(R.id.radio2);
butNext=(Button)findViewById(R.id.button1);
//radioGroup1=(RadioGroup)findViewById(R.id.radioGroup1);
setQuestionView();
// timer.start();
rt = (TextView)findViewById(R.id.rt);
rt.setText("20");
countDownTimer.start();
butNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
countDownTimer.cancel();
if(getNextQuestion(false)){
//Start The timer again
countDownTimer.start();
}}
});
}
private void setQuestionView()
{
txtQuestion.setText(currentQ.getQUESTION());
rda.setText(currentQ.getOPTA());
rdb.setText(currentQ.getOPTB());
rdc.setText(currentQ.getOPTC());
}
public class MyCountDownTimer extends CountDownTimer {
public MyCountDownTimer(long startTime, long interval) {
super(startTime, interval);
}
public void onFinish() {
Log.e("Times up","Times up");
countDownTimer.cancel();
if (getNextQuestion(false)) {
//Start The timer again
countDownTimer.start();
}
}
@Override
public void onTick(long millisUntilFinished) {
rt.setText((millisUntilFinished/1000)+"");
Log.e("Second Gone","Another Second Gone");
Log.e("Time Remaining","seconds remaining: " + millisUntilFinished / 1000);
}
}
boolean getNextQuestion(boolean c){
nextFlag = true;
RadioGroup grp=(RadioGroup)findViewById(R.id.radioGroup1);
//grp.clearCheck();
RadioButton answer=(RadioButton)findViewById(grp.getCheckedRadioButtonId());
if(rda.isChecked()||rdb.isChecked()||rdc.isChecked()){
qid++;
Log.d("yourans", currentQ.getANSWER()+" "+answer.getText());
grp.clearCheck();
//wronganswers=
if(!c && currentQ.getANSWER().equals(answer.getText())){
correct++;
}else{
lhm.put(currentQ.getQUESTION(),currentQ.getANSWER());
wrong++;
}
if(qid<5){
currentQ=quesList.get(qid);
setQuestionView();
}else{
score=correct;
Intent intent = new Intent(QuizActivity.this, ResultActivity.class);
Bundle b = new Bundle();
b.putInt("score", score); //Your score
intent.putExtras(b); //Put your score to your next Intent
startActivity(intent);
return false;
}
}else{
Toast.makeText(getApplicationContext(),
"Please select atleast one Option",Toast.LENGTH_SHORT).show();
}
return true;
}
}
//显示结果: ResultActivity.java
package com.example.triviality;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
public class ResultActivity extends Activity {
Button restart;
Button check;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result);
TextView t=(TextView)findViewById(R.id.textResult);
TextView t1=(TextView)findViewById(R.id.textResult1);
TextView t2=(TextView)findViewById(R.id.textResult2);
restart=(Button)findViewById(R.id.restart);
check=(Button)findViewById(R.id.check);
StringBuffer sb=new StringBuffer();
sb.append("Correct ans: "+QuizActivity.correct+"\n");
StringBuffer sc=new StringBuffer();
sc.append("Wrong ans : "+QuizActivity.wrong+"\n");
StringBuffer sd=new StringBuffer();
sd.append("Final Score : "+QuizActivity.score);
t.setText(sb);
t1.setText(sc);
t2.setText(sd);
QuizActivity.correct=0;
QuizActivity.wrong=0;
check.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent in=new Intent(getApplicationContext(),CheckActivity.class);
startActivity(in);
}
});
restart.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intent=new Intent(getApplicationContext(),QuizActivity.class);
startActivity(intent);
QuizActivity.lhm.clear();
QuizActivity.qid=0;
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_result, menu);
return true;
}
}
答案 0 :(得分:0)
你可以用这个
安排倒计时,直到将来的某个时间,并在此过程中定期发送通知。在文本字段中显示30秒倒计时的示例:
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
mTextField.setText("done!");
}
}.start();
对onTick(long)的调用将同步到此对象,以便在上一次回调完成之前不会发生对onTick(long)的一次调用。这仅在onTick(long)的执行花费一定时间执行时才相关,这与倒计时间隔相比是显着的。
获取更多帮助link
我希望这对你有所帮助。
答案 1 :(得分:0)
将MyCountDownTimer countDownTimer
设为全局变量
// Global Variable
MyCountDownTimer countDownTimer;
boolean isTimerFinished = false;
// Oncreate
countDownTimer = new MyCountDownTimer(20000 /*20 Sec*/, 1000);
countDownTimer.start();
butNext.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (rda.isChecked() || rdb.isChecked() || rdc.isChecked()) {
qid++;
Log.d("yourans", currentQ.getANSWER() + " " + answer.getText());
grp.clearCheck();
// wronganswers=
if (currentQ.getANSWER().equals(answer.getText())) {
correct++;
} else {
lhm.put(currentQ.getQUESTION(), currentQ.getANSWER());
wrong++;
}
getNext();
}else{
Toast.makeText(getApplicationText(), "Please Select an Option", Toast.LENGTH_LONG).show();
}
}
});
// Counter Class
@SuppressLint("NewApi")
public class MyCountDownTimer extends CountDownTimer {
public MyCountDownTimer(long startTime, long interval) {
super(startTime, interval);
}
@Override
public void onFinish() {
Log.e("Times up","Times up");
isTimerFinished = true;
getNextQuestion();
}
@Override
public void onTick(long millisUntilFinished) {
Log.e("Second Gone","Another Second Gone");
Log.e("Time Remaining","seconds remaining: " + millisUntilFinished / 1000);
}
}
void getNextQuestion() {
nextFlag = true;
RadioGroup grp = (RadioGroup) findViewById(R.id.radioGroup1);
// grp.clearCheck();
RadioButton answer = (RadioButton) findViewById(grp
.getCheckedRadioButtonId());
if (isTimerFinished) {
// Checking if some option is selected on time finished
someName();
} else {
// No Option Selected After Time Finished
// Write your Logic here About Question Handling on "No OPTION SELECTED After Timer Finished..." My Logic May Be Wrong depends on how you are handling it.
lhm.put(currentQ.getQUESTION(), currentQ.getANSWER());
wrong++;
}
getNext();
}
void someName() {
if (rda.isChecked() || rdb.isChecked() || rdc.isChecked()) {
qid++;
Log.d("yourans", currentQ.getANSWER() + " " + answer.getText());
grp.clearCheck();
if (currentQ.getANSWER().equals(answer.getText())) {
correct++;
} else {
lhm.put(currentQ.getQUESTION(), currentQ.getANSWER());
wrong++;
}
}
}
void getNext() {
if (qid < 5) {
currentQ = quesList.get(qid);
setQuestionView();
} else {
score = correct;
Intent intent = new Intent(QuizActivity.this, ResultActivity.class);
Bundle b = new Bundle();
b.putInt("score", score); // Your score
intent.putExtras(b); // Put your score to your next Intent
startActivity(intent);
}
}
private void setQuestionView() {
txtQuestion.setText(currentQ.getQUESTION());
rda.setText(currentQ.getOPTA());
rdb.setText(currentQ.getOPTB());
rdc.setText(currentQ.getOPTC());
// Start The timer again
countDownTimer.start();
}