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