0

我正在制作一个 Android 测验应用程序,我希望它有一个计时器.. 15 秒。当计时器结束时,它会转到一个新问题。我真的没有尝试任何东西,因为我真的没有任何线索,除了一个计时器,但这似乎是一个糟糕的解决方案......代码:

我已经为倒计时添加了这段代码......当它完成时你会看到它转到方法 generateQuestion().. 现在它生成一个新问题,但答案混淆了.. 它显示了其他一些问题的答案..我该如何解决这个问题?

package com.matej.hajdukkviz;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import com.google.ads.AdRequest;
import com.google.ads.AdView;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.graphics.Color;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class Glavno extends Activity implements OnClickListener {

int score  = 0;
int counter = 0;
boolean ajme = true;

TextView textView1, textView2, textView3, countdown;
Button btn1, btn2, btn3, btn4;

ArrayList<Question> qsts = new ArrayList<Question>();
List<Integer> generated = new ArrayList<Integer>();

ArrayList<String> allAnswers = new ArrayList<String>();

Random rng = new Random();
Question nextQuestion;

Question qjedan = new Question(
        "Q1",

        "Correct answer - q1",
        "Wrong answer 3 - q1",
        "Wrong answer 3 - q1",
        "Wrong answer 3 - q1"
        );
Question q2 = new Question(
        "Q2",

        "Correct answer - q2",
        "Wrong answer 3 - q2",
        "Wrong answer 3 - q2",
        "Wrong answer 3 - q2"
        );
Question q3 = new Question(
        "Q3",

        "Correct answer - q3",
        "Wrong answer 3 - q3",
        "Wrong answer 3 - q3",
        "Wrong answer 3 - q3"
        );


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);

    setContentView(R.layout.pitanja);

// ADD THE QUESTIONS IN THE ArrayList qsts

 new CountDownTimer(20000, 1000) {

         public void onTick(long millisUntilFinished) {
             textView4.setText("Seconds remaining: " + millisUntilFinished / 1000);
         }

         public void onFinish() {
             generateQuestion();
             textView2.setText("VRIJEME!");
             textView2.setTextColor(Color.RED);

         }
          }.start();

    qsts.add(qjedan);           
    qsts.add(q2);
    qsts.add(q3);

    textView1 = (TextView) findViewById(R.id.textView1);
    textView2 = (TextView) findViewById(R.id.textView2);
    textView3 = (TextView) findViewById(R.id.textView3);

    textView3.setText("Rezultat: " + score);

        btn1 = (Button) findViewById(R.id.btn1);
        btn2 = (Button) findViewById(R.id.btn2);
        btn3 = (Button) findViewById(R.id.btn3);
        btn4 = (Button) findViewById(R.id.btn4);

        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
        btn3.setOnClickListener(this);
        btn4.setOnClickListener(this);

    generateQuestion();

}

    public void generateQuestion(){

        while(ajme = true){

            int nxt = rng.nextInt(3);

            if (!generated.contains(nxt)){

                generated.add(nxt);

                nextQuestion = qsts.get(nxt);

                textView1.setText(nextQuestion.questionText);

                allAnswers.add(nextQuestion.correctAnswerText);
                allAnswers.add(nextQuestion.wrongAnswer1);
                allAnswers.add(nextQuestion.wrongAnswer2);
                allAnswers.add(nextQuestion.wrongAnswer3);

                Collections.shuffle(allAnswers);

                btn1.setText(allAnswers.get(0));
                btn2.setText(allAnswers.get(1));
                btn3.setText(allAnswers.get(2));
                btn4.setText(allAnswers.get(3));

                break;
            }
        }
    }


    @Override
    public void onClick(View v) {
        Button b = (Button)v;
        String buttonText = b.getText().toString();

        if (counter == 3) {

            Intent theIntent = new Intent(this, Score.class);
            theIntent.putExtra("somename", score);  
            startActivity(theIntent);

            finish();   // Added this method call
        }

        else if(buttonText.equals(nextQuestion.correctAnswerText)) { 

            counter++;

            AdView ad = (AdView) findViewById(R.id.ads);
            ad.loadAd(new AdRequest());

            textView2.setText("TOČNO!");
            textView2.setTextColor(Color.GREEN);
            textView3.setText("Rezultat: " + (score += 10));

            allAnswers.clear();
            generateQuestion();

            return;
        } 

        else{

            counter++;

            AdView ad = (AdView) findViewById(R.id.ads);
            ad.loadAd(new AdRequest());

            textView2.setText("NETOČNO!");
            textView2.setTextColor(Color.RED);
            textView3.setText("Rezultat: " + (score -= 5));

            allAnswers.clear();
            generateQuestion();

            return; 
        }

    }   

}

4

2 回答 2

3

我不会为您编写代码,但是,在这种情况下,我认为您需要一个CountdownTimer。这是非常容易使用。这是文档中的示例。

 new CountDownTimer(30000, 1000) {

 public void onTick(long millisUntilFinished) {
     mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
 }

 public void onFinish() {
     mTextField.setText("done!");
 }
  }.start();

基本上,这onTick()将允许您更新 aTextView剩下的秒数或其他任何内容(您也可以在这里做任何您想做的事情)。然后onFinish()将允许你,比如说,去下一个Activity

这是我给出的答案,如果它有帮助,有人会遇到问题。

于 2013-08-03T00:38:23.637 回答
0

使用处理程序

private Handler mHandler = new Handler();

mHandler.removeCallbacks(mUpdateTimeTask);

mHandler.postDelayed(mUpdateTimeTask, 15000);

private Runnable mUpdateTimeTask = new Runnable() {
   public void run() {
       //do something
   }
};
于 2013-08-03T00:40:36.057 回答