코틀린으로 안드로이드 앱 개발하기
GitHub : https://github.com/MyStoryG/CapitalQuiz
지난번에는 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()
}
}
이렇게 보기 정보를 생성하고 보기 버튼을 눌렀을 때 정답인지 오답인지 표기하는 기능까지 추가되어 앱이 완성되었습니다.