먼저 model 디렉토리와 quiz 디렉토리를 만들어 준다.
model 디렉토리의 Quiz 클래스 코드
package com.kks.model;
public class Quiz {
private int question;
private boolean answer;
public Quiz(int question, boolean answer) {
this.question = question;
this.answer = answer;
}
public int getQuestion() {
return question;
}
public void setQuestion(int question) {
this.question = question;
}
public boolean isAnswer() {
return answer;
}
public void setAnswer(boolean answer) {
this.answer = answer;
}
}
- 필드: question과 answer라는 두 개의 프라이빗 필드를 가지고 있다.
- 생성자: 객체 생성 시 question과 answer 값을 초기화한다.
- Getter와 Setter 메서드: 각 필드의 값을 가져오거나 설정하는 메서드를 제공한다.
이 클래스는 퀴즈 애플리케이션에서 각 퀴즈 항목을 나타내는 데 사용될 수 있다. 예를 들어, question 필드는 질문의 ID를, answer 필드는 그 질문의 정답 여부를 저장하는 데 사용된다.
안드로이드 퀴즈 앱 로직 설명
사용자가 퀴즈를 풀 수 있는 안드로이드 앱의 주요 로직을 설명한다. 이 앱은 퀴즈 문제를 출제하고, 사용자가 정답과 오답을 선택하면 결과를 보여준다. 모든 퀴즈가 끝나면 결과를 요약한 알림 창이 표시된다.
package com.kks.quiz;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import com.kks.model.Quiz;
import java.util.ArrayList;
public class MainActivity extends AppCompatActivity {
int count = 0; // 정답 횟수를 저장하는 변수이다.
TextView txtQuiz; // 현재 퀴즈를 보여주는 TextView이다.
ProgressBar progressBar; // 진행 상황을 나타내는 ProgressBar이다.
TextView txtResult; // 정답 여부를 보여주는 TextView이다.
Button btnTrue; // "True" 버튼이다.
Button btnFalse; // "False" 버튼이다.
// 퀴즈 문제들을 저장할 ArrayList이다.
ArrayList<Quiz> quizArrayList = new ArrayList<>();
private int currentQuizIndex; // 현재 퀴즈의 인덱스를 저장하는 변수이다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// XML 레이아웃 파일의 UI 컴포넌트를 자바 변수와 연결한다.
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);
// 퀴즈를 설정한다.
setQuiz();
// 첫 번째 퀴즈를 화면에 출제한다.
Quiz quiz = quizArrayList.get(currentQuizIndex);
txtQuiz.setText(quiz.getQuestion());
// 프로그래스바에 진행 상황을 표시한다.
progressBar.setProgress(currentQuizIndex + 1);
btnTrue.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Quiz quiz = quizArrayList.get(currentQuizIndex);
if (quiz.isAnswer() == true) {
txtResult.setText("정답입니다~~");
count += 1;
} else {
txtResult.setText("오답입니다~~");
}
currentQuizIndex += 1;
if (currentQuizIndex == quizArrayList.size()) {
showAlertDialog();
return;
}
quiz = quizArrayList.get(currentQuizIndex);
txtQuiz.setText(quiz.getQuestion());
progressBar.setProgress(currentQuizIndex + 1);
}
});
btnFalse.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Quiz quiz = quizArrayList.get(currentQuizIndex);
if (quiz.isAnswer() == false) {
txtResult.setText("정답입니다~~");
count += 1;
} else {
txtResult.setText("오답입니다~~");
}
currentQuizIndex += 1;
if (currentQuizIndex == quizArrayList.size()) {
showAlertDialog();
return;
}
quiz = quizArrayList.get(currentQuizIndex);
txtQuiz.setText(quiz.getQuestion());
progressBar.setProgress(currentQuizIndex + 1);
}
});
}
private void showAlertDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setCancelable(false);
builder.setTitle("퀴즈 끝!");
builder.setMessage("지금까지 맞춘 문제는 " + count + "개 입니다. 다시풀기를 누르시면 퀴즈가 재시작 되고, 종료를 누르시면 퀴즈가 종료됩니다.");
builder.setPositiveButton("다시풀기", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
currentQuizIndex = 0;
count = 0;
Quiz quiz = quizArrayList.get(currentQuizIndex);
txtQuiz.setText(quiz.getQuestion());
progressBar.setProgress(currentQuizIndex + 1);
txtResult.setText("결과");
}
});
builder.setNegativeButton("종료", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
builder.show();
}
private void setQuiz() {
Quiz q = new Quiz(R.string.q1, true);
quizArrayList.add(q);
q = new Quiz(R.string.q2, false);
quizArrayList.add(q);
q = new Quiz(R.string.q3, true);
quizArrayList.add(q);
q = new Quiz(R.string.q4, false);
quizArrayList.add(q);
q = new Quiz(R.string.q5, false);
quizArrayList.add(q);
q = new Quiz(R.string.q6, true);
quizArrayList.add(q);
q = new Quiz(R.string.q7, true);
quizArrayList.add(q);
q = new Quiz(R.string.q8, true);
quizArrayList.add(q);
q = new Quiz(R.string.q9, false);
quizArrayList.add(q);
q = new Quiz(R.string.q10, true);
quizArrayList.add(q);
}
}
필드 선언
- count는 정답 횟수를 저장하는 변수이다.
- txtQuiz는 현재 퀴즈를 보여주는 TextView이다.
- progressBar는 진행 상황을 나타내는 ProgressBar이다.
- txtResult는 정답 여부를 보여주는 TextView이다.
- btnTrue는 "True" 버튼이다.
- btnFalse는 "False" 버튼이다.
- quizArrayList는 퀴즈 문제들을 저장할 ArrayList이다.
- currentQuizIndex는 현재 퀴즈의 인덱스를 저장하는 변수이다.
onCreate 메서드
- 액티비티가 생성될 때 호출되는 메서드이다. 여기서 UI 컴포넌트를 자바 변수와 연결하고, 퀴즈를 설정한 후 첫 번째 퀴즈를 화면에 출제한다.
- btnTrue와 btnFalse 버튼에 클릭 리스너를 설정하여 사용자가 정답과 오답을 선택할 때 각각의 동작을 정의한다.
showAlertDialog 메서드
- 퀴즈가 모두 끝났을 때 결과를 요약한 알림 창을 표시하는 메서드이다. "다시풀기" 버튼을 클릭하면 퀴즈를 초기화하고, "종료" 버튼을 클릭하면 액티비티를 종료한다.
setQuiz 메서드
- 퀴즈 문제들을 설정하는 메서드이다. Quiz 객체를 생성하여 quizArrayList에 추가한다.
이 앱은 사용자가 퀴즈를 풀 수 있도록 도와주는 간단한 안드로이드 애플리케이션이다. 각 퀴즈 문제는 Quiz 객체로 저장되며, 사용자가 "True" 또는 "False" 버튼을 클릭하면 정답 여부를 확인하고 결과를 표시한다. 모든 퀴즈가 끝나면 사용자가 다시 퀴즈를 풀거나 종료할 수 있도록 알림 창이 표시된다.
안드로이드 퀴즈 실행결
먼저 문제를 풀면 프로그래스 바 게이지가 차는 것을 볼 수 있다.
퀴즈를 다풀면 종료 및 다시풀기 버튼이 나오는데, 다시풀기를 누르면 처음부터 다시 풀 수 있게 되고,
종료를 누를시 화면이 내려간다.
'안드로이드 스튜디오' 카테고리의 다른 글
[안드로이드 스튜디오] 액티비티 간의 양방향 데이터 전달방법 (0) | 2024.06.07 |
---|---|
[안드로이드 스튜디오]액티비티 간의 단반향 데이터 전달방법 (0) | 2024.06.07 |
[안드로이드 스튜디오]퀴즈앱 화면개발(progrss Bar 활용) (0) | 2024.06.06 |
[안드로이스 스튜디오]Linear Layout으로 화면 개발하기 (0) | 2024.06.06 |
[안드로이드 스튜디오]로그인 화면 만들기(스낵바,토스트바 활용) (0) | 2024.06.06 |