퀴즈를 푸는 앱을 만들었다고 치자
그래서 문제를 푸는데
문제를 다 풀면
에러와 함께 종료가 되어버린다
이런 상황을 만들어선 안된다
그렇다면 어떤 방법이 있을까
어떤 알람 메세지와 함께
다시 풀것인지 종료 할 것인지 선택지를 주는 방법은 어떨까?
이때 사용하는 알람 메세지가
AlertDialog
우선
위의 퀴즈풀이 앱의 경우
currentQuizIndex = currentQuizIndex +1;
if( currentQuizIndex == quizArrayList.size() ) {
showAlertDialog();
return;
}else{
quiz = quizArrayList.get(currentQuizIndex);
txtQuiz.setText(quiz.getQuestion());
progressBar.setProgress(currentQuizIndex + 1);
}
문제를 하나 풀면 다음문제를 풀기위해
인덱스에 +1을 해주어
다음문제가 나오게끔 하는데
인덱스가 어레이리스트보다 커지면
에러가 나기때문에
어레이리스트 즉, 갖고있는 퀴즈의 숫자가
동일해졌을때,
그러니까 문제를 다 풀었을때
showAlertDialog()
라는 함수를 호출하고
return 시켜주어 에러상황을 피한다
이제 함수의 머리를 만들었으니
함수의 몸통을 만들어보자
안드로이드 스튜디오는
친절히도 함수를 만들어주니 클릭하여
그안에 내용만 넣어주자
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setCancelable(false);
builder.setTitle("퀴즈가 종료되었습니다");
builder.setMessage("지금까지의 정답수는 "+ answerList.size() +" 개입니다," +
" 다시 풀기를 누르시면 퀴즈가 다시 시작되며 종료를 누르시면 퀴즈가 종료됩니다");
builder.setPositiveButton("다시풀기", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
answerList.clear();
currentQuizIndex = 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 dialogInterface, int i) {
finish();
}
});
builder.show();
}
전체적인 맥락은 이렇고
내용은 이렇다
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
를 통해서 객체를 생성
setCancelable(false)
를 통해 다이얼로그 외부를 클릭해도 종료되지 않도록 설정
setTitle은 제목설정
setMessage 는 보여주고 싶은 메세지 설정
positive버튼은 다시풀기로
negative버튼은 종료로 설정하여
둘 다 온클릭 함수를 설정해주는것은 동일하다
우선 긍정버튼은 문제를 다시 풀기 위해
이전에 사용한 어레이리스트들을 초기화
정답갯수 설정을 위한 리스트,퀴즈리스트의 번호,퀴즈창의 텍스트 등등등
그리고 부정버튼에서는
종료인데
사실 앱 종료 하는 그런 기능은 없다
그렇기에 액티비티를 종료 시킨다
finish() 액티비티를 종료 시키는 함수
긍정버튼과 마찬가지로 온클릭 함수를 생성후 그 안에
finish() 를 넣어 현재 액티비티를 종료 시킨다
그리고 builder.show( )를 통해
위의 설정된 다이얼로그 화면을 표시한다
종료버튼을 누르면 우측과 같이 홈 화면으로 돌아가게 된다
그리고 긍정버튼 부정버튼에
의미는 없으니
위치에 따라 종료버튼을 우측에 두고 싶다면
긍정버튼의 내용과 종료버튼의 내용을
서로 바꾸면 되겠다
'Java > AndroidStudio' 카테고리의 다른 글
Android - SharedPreferences 데이터저장과 불러오기 (0) | 2024.06.07 |
---|---|
Android - 액티비티간의 데이터 전달 방법 (0) | 2024.06.07 |
Android - LinearLayout (0) | 2024.06.05 |
Android - 로그 가져오기, 스낵바, 토스트 (0) | 2024.06.04 |
Android - 주사위 굴리기 (0) | 2024.06.04 |