qpp / com.bpdev.quizapp / MainActivity.java

package com.bpdev.quizapp;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;

import com.bpdev.quizapp.model.Quiz;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {
    // 아래에서 먼저 연결해서 가져올 수 있다.

    TextView txtQuiz;
    ProgressBar progressBar;
    TextView txtResult;

    Button btnTrue;
    Button btnFalse;

    // 퀴즈 저장용 멤버 변수
    ArrayList<Quiz> quizArrayList = new ArrayList<>(); // string이었다가 Quiz 생성자 만들어서 바꿔줌!
    // = new ArrayList<>();없어서 오류남

    int currentQuizIndex = 0;

    int count = 0;

    Quiz quiz;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        txtQuiz = findViewById(R.id.txtQuiz);
        progressBar = findViewById(R.id.progressBar);
        txtResult = findViewById(R.id.txtResult);
        btnTrue = findViewById(R.id.btnTrue);
        btnFalse = findViewById(R.id.btnFalse);

        // 파일에 있는 퀴즈를 cpu는 처리하지 못함. 먼저 메모리로 불러와야 함. 변수로 만듦.
        // 퀴즈를 내야 한다. 퀴즈를 먼저 메모리에 변수로 만들어야 한다.
        // 퀴즈가 여러 개니까, 여러 개를 하나의 변수로 처리할 수 있는 데이터 스트럭쳐가 필요하고,
        // 자바의 가장 유용한 데이터스트럭쳐, 어레이리스트를 사용한다.

        // 문제와 정답은 한꺼번에 묶어서 class로 만들자. ArrayList 로 저장한다.
        setQuiz();

        progressBar.setProgress(currentQuizIndex+1, true); // 프로그래스바 초기화

        // 문제를 출제한다.
        quiz = quizArrayList.get(currentQuizIndex);

        // 화면에 표시한다.
        txtQuiz.setText(quiz.question);


        btnTrue.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if ( !getQuiz() ){
                    return;
                }

                if( quiz.answer == true ){
                    txtResult.setText("정답입니다.");
                    count = count + 1;
                } else {
                    txtResult.setText("오답입니다.");
                }
            }
        });

        btnFalse.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if ( !getQuiz() ){
                    return;
                }

                if( quiz.answer == false ){
                    txtResult.setText("정답입니다.");
                    count = count + 1;
                } else {
                    txtResult.setText("오답입니다.");
                }
            }
        });
    }

    private boolean getQuiz() {

        Log.i("QUIZ MAIN", currentQuizIndex + "");

        if (currentQuizIndex >= quizArrayList.size() ) {
            txtResult.setText("지금까지 맞춘 문제는"+count +"개 입니다.");
            // 문제를 다 맞추면 cpu가 동작하면 안됩니다.

            // 팝업을 띄우자.
            showAlertDialog();

            return false;
        }

        quiz = quizArrayList.get(currentQuizIndex);
        txtQuiz.setText(quiz.question);

        progressBar.setProgress(currentQuizIndex+1, true );

        currentQuizIndex = currentQuizIndex + 1;

        return true;
    }

    void setQuiz(){
        Quiz q1 = new Quiz(R.string.q1, true);
        quizArrayList.add(q1);
        Quiz q2 = new Quiz(R.string.q2, false);
        quizArrayList.add(q2);
        Quiz q3 = new Quiz(R.string.q3, true);
        quizArrayList.add(q3);
        Quiz q4 = new Quiz(R.string.q4, false);
        quizArrayList.add(q4);
        Quiz q5 = new Quiz(R.string.q5, true);
        quizArrayList.add(q5);
        Quiz q6 = new Quiz(R.string.q6, false);
        quizArrayList.add(q6);
        Quiz q7 = new Quiz(R.string.q7, true);
        quizArrayList.add(q7);
        Quiz q8 = new Quiz(R.string.q8, false);
        quizArrayList.add(q8);
        Quiz q9 = new Quiz(R.string.q9, true);
        quizArrayList.add(q9);
        Quiz q10 = new Quiz(R.string.q10, false);
        quizArrayList.add(q10);
    }

    // AlertDialog 알러트 다이얼로그 만들기

    private void showAlertDialog(){
        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); // 어디에 띄울 때 컨텍스트로 알려줘야 함. ()생성자
        builder.setTitle("퀴즈 끝~");
        builder.setMessage("지금까지 맞춘 문제는"+count +"개 입니다.");
        // 이 다이얼로그의 외곽부분을 눌렀을 대, 사라지지 않도록 하는 코드
        builder.setCancelable(false);
        builder.setPositiveButton("확인", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                // 퀴즈를 처음부터 다시 풀 수 있도록 할 것이다.
                currentQuizIndex = 0;
                Quiz quiz = quizArrayList.get(currentQuizIndex);
                txtQuiz.setText(quiz.question);
                txtResult.setText("결과");

                progressBar.setProgress(currentQuizIndex+1,true);
                count = 0;
            }
        });
        builder.setNegativeButton("종료", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {

                // 액티비티를 종료시키는 코드!
                finish();
            }
        });
        builder.show();
    }

}

 

AlertDialog

https://developer.android.com/guide/topics/ui/dialogs?hl=ko 

 

대화상자  |  Android 개발자  |  Android Developers

대화상자 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 대화상자는 사용자에게 결정을 내리거나 추가 정보를 입력하라는 메시지를 표시하는 작은 창입니

developer.android.com

 

 

 

 

qpp / com.bpdev.quizapp / model / Quiz.java

package com.bpdev.quizapp.model;

import java.util.ArrayList;

public class Quiz {

    public int question;
    public boolean answer;

    public Quiz(int question, boolean answer) {
        this.question = question;
        this.answer = answer;
    }

}

 

 

 

res / layout / activity_main.xml

Code

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/txtQuiz"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="100dp"
        android:gravity="center|center_vertical"
        android:text="퀴즈"
        android:textSize="24sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginStart="20dp"
        android:layout_marginTop="90dp"
        android:layout_marginEnd="20dp"
        android:max="10"
        android:progress="3"
        android:progressTint="#F44336"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/txtQuiz" />

    <TextView
        android:id="@+id/txtResult"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="100dp"
        android:gravity="center|top"
        android:text="결과"
        android:textSize="24sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/progressBar" />

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="20dp"
        android:layout_marginTop="80dp"
        android:layout_marginEnd="20dp"
        android:orientation="horizontal"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/txtResult">

        <Button
            android:id="@+id/btnTrue"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:layout_weight="1"
            android:backgroundTint="#3F51B5"
            android:text="참"
            android:textSize="24sp" />

        <Button
            android:id="@+id/btnFalse"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:backgroundTint="#F44336"
            android:text="거짓"
            android:textSize="24sp" />
    </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

Design

 

+ Recent posts