0

I'm making an Android quiz app and it seems like it's all done except adding the questions but there is still a big error. You see I've put that the random generater generates 4 questions. When I answer the fourth I would like that a new activity starts with the display of the score. Instead the app just doesn't respond. I'm really clueless.

Thank you!

package com.matej.hajdukkviz;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;
import android.os.Bundle;
import android.app.Activity;
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;

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 q1 = new Question(
        "Q1",

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

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

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

Question q4 = new Question(
        "Q4?",

        "Correct answer - q4",
        "Wrong answer 1 - q4",
        "Wrong answer 2 - q4",
        "Wrong answer 3 - q4"
        );

@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

    qsts.add(q1);           
    qsts.add(q2);
    qsts.add(q3);
    qsts.add(q4);

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

    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(true){

            int nxt = rng.nextInt(4);

            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(buttonText.equals(nextQuestion.correctAnswerText)) { 

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

            allAnswers.clear();
            generateQuestion();

            return;

        }else{

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

            allAnswers.clear();
            generateQuestion();

            return; 
        }

    }   

}

4

2 回答 2

0

在你的下一个中放一些东西Activity,确保它在中正确声明,manifest.xml为它创建一个布局,然后在你最后一个问题得到回答后添加这个代码

  Intent intent = new Intent(Glavno.this, NextActivityName.class);   // declare and initialize an Intent object
  startActivity(intent); // pass the Intent object to startActivity()

意图

活动

编辑

我看到您已经接受了答案,但听起来它无法正常工作。你还没有完成,所以你的代码会onClick()运行。我将编辑您拥有的内容并在下面发布。那应该有帮助。

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

    if (counter == 4) {
        startActivity(new Intent(Glavno.this, Score.class));
        finish();   // Added this method call
    }

    else if(buttonText.equals(nextQuestion.correctAnswerText)) { // Changed this to else if

        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; 
    }

}   
于 2013-07-29T19:22:48.163 回答
0

在您generateQuestion()的循环中true(总是如此),然后仅在未显示随机问题时才执行某些操作。当然,这是一个无限循环。如果是 4 个问题,您可以声明一个全局变量counter,在每个问题之后增加该变量。而不是在true你说 if counter < 4elsestartNewIntent()或类似 codeMagic 提到的代码时循环。

于 2013-07-29T19:29:41.900 回答