본문 바로가기
Java/AndroidStudio

Android - AlertDialog , 액티비티 종료법

by 하니__ 2024. 6. 5.

 

 

퀴즈를 푸는 앱을 만들었다고 치자

 

 

그래서 문제를 푸는데

문제를 다 풀면

 

에러와 함께 종료가 되어버린다

 

 

이런 상황을 만들어선 안된다

 

그렇다면 어떤 방법이 있을까

 

 

어떤 알람 메세지와 함께

 

다시 풀것인지 종료 할 것인지 선택지를 주는 방법은 어떨까?

 

 

 

이때 사용하는 알람 메세지가

 

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( )를 통해

위의 설정된 다이얼로그 화면을 표시한다

 

 

종료버튼을 누르면 우측과 같이 홈 화면으로 돌아가게 된다

 

 

 

그리고 긍정버튼 부정버튼에

의미는 없으니

위치에 따라 종료버튼을 우측에 두고 싶다면

긍정버튼의 내용과 종료버튼의 내용을

서로 바꾸면 되겠다