국가 수도 맞추기 앱 만들기 #03



 지난번에는 prev_button, next_button 시에 updateQuestion()이 실행되도록 하였습니다.

updateQuestion()은 onCreate() 시에도 실행됩니다. updateQuestion() 내부에는 아래와 같이 세 개의 함수가 존재하며 각 함수의 역할은 다음과 같습니다.


showQuestion() : 문제와 국가 정보를 표기

setQuestionNumber() : 보기에 표시될 수도 정보 생성

setAnswerButtonText() : 생성된 수도 정보를 버튼에 표시 


showQuestion()은 제일 처음 시간에 살펴봤던 함수이므로 넘어가겠습니다.


 setQuestionNumber()는 list에 네 개의 수도 정보를 담는 역할을 합니다. 이때에 랜덤으로 네 개의 수도 정보를 담고 그 중 첫번째를 문제의 국가 정보에 해당하는 수도 정보로 교체합니다. 즉, 정답을 하나 심는 과정입니다. 그리고 셔플하여 섞어줍니다. 중복되지 않도록 중복처리도 했습니다.


여기서 list를 복습할 수 있습니다.


Java

 private List<Integer> mAnswer = new ArrayList<Integer>();


코틀린

 private val mAnswer = mutableListOf<Int>() 


 updateQuestion()을 통해서 setQuestionNumber()가 호출될 때마다 add 되므로 mutableListOf를 사용하였습니다.


 mAnswer.clear()

 mAnswer.add(0, -1)

 mAnswer.add(1, -1)

 mAnswer.add(2, -1)

 mAnswer.add(3, -1) 


 이렇게 완성된 보기는 버튼에 다음과 같이 표시해줍니다.


    private fun setAnswerButtonText() {

        answer_one.setText(resources.getString(mCountryList.mQuestions[mAnswer.get(0)].capital))

        answer_two.setText(resources.getString(mCountryList.mQuestions[mAnswer.get(1)].capital))

        answer_three.setText(resources.getString(mCountryList.mQuestions[mAnswer.get(2)].capital))

        answer_four.setText(resources.getString(mCountryList.mQuestions[mAnswer.get(3)].capital))

    } 


 버튼을 눌렀을 때 표시된 정보와 문제의 국가 정보에 해당하는 수도가 일치하면 정답이라는 토스트 메세지를 보여줍니다. 틀리면 오답이라는 토스트 메세지를 보여줍니다. 다음과 같이 각 버튼에서 조건을 체크하여 어떤 토스트를 보여줄지 정합니다.

mCountryList.mQuestions[mCurrentIndex].capital는 정답이 되는 수도 정보이고 mCountryList.mQuestions[mAnswer.get(0)].capital는 첫번째 보기에 해당하는 수도 정보입니다.

mAnswer.get(1), mAnswer.get(2), mAnswer.get(3)은 각각 두번째, 세번째, 네번째 보기에 해당하는 수도 정보가 되겠죠.


        answer_one.setOnClickListener {

            if (resources.getString(mCountryList.mQuestions[mCurrentIndex].capital) == resources.getString(mCountryList.mQuestions[mAnswer.get(0)].capital)) {

                Toast.makeText(applicationContext, R.string.answer_true, Toast.LENGTH_SHORT).show()

            } else {

                Toast.makeText(applicationContext, R.string.answer_false, Toast.LENGTH_SHORT).show()

            }

        }


        answer_two.setOnClickListener {

            if (resources.getString(mCountryList.mQuestions[mCurrentIndex].capital) == resources.getString(mCountryList.mQuestions[mAnswer.get(1)].capital)) {

                Toast.makeText(applicationContext, R.string.answer_true, Toast.LENGTH_SHORT).show()

            } else {

                Toast.makeText(applicationContext, R.string.answer_false, Toast.LENGTH_SHORT).show()

            }

        }


        answer_three.setOnClickListener {

            if (resources.getString(mCountryList.mQuestions[mCurrentIndex].capital) == resources.getString(mCountryList.mQuestions[mAnswer.get(2)].capital)) {

                Toast.makeText(applicationContext, R.string.answer_true, Toast.LENGTH_SHORT).show()

            } else {

                Toast.makeText(applicationContext, R.string.answer_false, Toast.LENGTH_SHORT).show()

            }

        }


        answer_four.setOnClickListener {

            if (resources.getString(mCountryList.mQuestions[mCurrentIndex].capital) == resources.getString(mCountryList.mQuestions[mAnswer.get(3)].capital)) {

                Toast.makeText(applicationContext, R.string.answer_true, Toast.LENGTH_SHORT).show()

            } else {

                Toast.makeText(applicationContext, R.string.answer_false, Toast.LENGTH_SHORT).show()

            }

        } 


 이렇게 보기 정보를 생성하고 보기 버튼을 눌렀을 때 정답인지 오답인지 표기하는 기능까지 추가되어 앱이 완성되었습니다.




+ Recent posts