오늘은 문제와 간단한 토스트 메세지 남기기를 해보겠습니다.
activity_main.xml의 btn_start인 id를 누를 때 기준으로 (혹시나 id가 MainActivity.kt에서 인식이 되지 않는 다면 build.gradle에서 plugins에
id 'kotlin-android-extensions'
를 추가해 보세요.)
MainActivity.kt에서 코드를 시작하겠습니다.
먼저 btn_start.setOnClickListener {} 을 통해 이름을 받아 intent로 넘겨 주도록 하겠습니다.
btn_start.setOnClickListener {
if (et_name.text.toString().isEmpty()) {//text라인에서 이름을 입력받지 못했다면
Toast.makeText(this,"Please enter yout name", Toast.LENGTH_SHORT).show() //짧게 토스트메세지
} else {
val intent = Intent(this, QuizQuestionActivity::class.java) //activity간의 데이터를 주고 받기 위한 용도
intent.putExtra(Constants.USER_NAME, et_name.text.toString()) //이름전송
startActivity(intent)//activity 전환, 이동 액션 수행
finish() //종료, 스택방지
}
}
et_name은 activity_main.xml에서 TextInputEditText에서 사용된 id이름으로 이곳이 빈칸이라면 toast메세지로 짧게 메세지를 출력하도록 하고 빈칸이 아니라면 else 코드를 수행하게 됩니다. 수행하게 되면 QuizQuestionActivity로 activity전환이 이루어 집니다. 주석을 보시면 쉽게 이해하실 수 있습니다.
다음으로 문제를 직접 만들어 보겠습니다.
먼저 새로운 .kt를 Question, Constants를 만들겠습니다.
Questions.kt는 data class로 다음과 같은 코드이며
package com.example.quizapp
data class Question(
val id: Int, //문제 번호
val question: String, //문제
val image: Int, //이미지
val optionOne: String, //option은 객관식 답변들
val optionTwo: String,
val optionThree: String,
val optionFour: String,
val correctAnswer: Int //정답
)
주석을 통해 이해하실 수 있게 하였습니다.
다음으로 Constants는 이제 직접 Question을 통해 문제를 만들 object 입니다.
사용자 이름 및 전체 문제 개수, 정답인 문제 개수를 이곳에서 받음과 동시에 문제를 출제하는 곳입니다.
package com.example.quizapp
object Constants{
const val USER_NAME : String = "user_name"
const val TOTAL_QUESTIONS: String = "total_question"
const val CORRECT_ANSWERS : String = "correct_answer"
fun getQuestions() : ArrayList<Question> {//질문배열목록을 반환해야함
val questionsList = ArrayList<Question>()
val que1 = Question(
1,
"이것은 총 얼마 인가요?", //문제
R.drawable.thousand,
"2000원",
"500원",
"10000원",
"1000원",
4
)
questionsList.add(que1)
//2
val que2 = Question(
2,
"이것은 총 얼마 인가요?", //문제
R.drawable.twothousand,
"2000원",
"500원",
"10000원",
"1000원",
1
)
questionsList.add(que2)
//3
val que3 = Question(
3,
"이것은 총 얼마 인가요?", //문제
R.drawable.fivehun,
"2000원",
"500원",
"10000원",
"1000원",
2
)
questionsList.add(que3)
//4
val que4 = Question(
4,
"이것은 총 얼마 인가요?", //문제
R.drawable.tenth,
"2000원",
"500원",
"10000원",
"1000원",
3
)
questionsList.add(que4)
//5
val que5 = Question(
5,
"이것은 총 얼마 인가요?", //문제
R.drawable.mifive,
"2000원",
"1500원",
"500원",
"1000원",
3
)
questionsList.add(que5)
return questionsList
}
}
간단한 문제로 구성되어 있으며 넣는 값을 다르게 하여 자신만의 문제를 만드셔도 좋을 것 같습니다.
근데 저는 영상에서 처럼 순차적이 아니라 랜덤으로 만들고 싶어서 랜덤으로 리스트에 추가하도록 하였습니다.
while (questionsList.size < 5) {
val ran = set.random()
if (questionsList.contains(ran)) {
continue
}
questionsList.add(ran)
}
위와 같은 코드를 사용하여 랜덤으로 넣어보았습니다.
(토스트 메세지)
원래는 위 코드와 같이 천원,2천원, .. 순으로 문제가 진행되었었다면
아래 코드를 추가함으로써
랜덤으로 문제가 출력되는 것을 확인할 수 있었습니다.
다음 시간에는 문제 xml과 문제가 잘 넘어가는 지 등을 공부해보도록 해보겠습니다.
안녕하세요! 우연히 같은 영상을 보다 검색을 하고 하고 들어오게 되면서 감사히 참고하고 있습니다! 질문을 하나 하고자 하는데요~ 랜덤으로 출력되게 하신다고 코드를 올려주셨는데
val ran = set.random() 이 부분에서 저는 set. 이 부분이 오류가 나더라고요.. 함수 호출 필요와 비슷한 타입을 찾을 수 없다고만 해서요. 저의 검색 능력에는 나오지 않아서 직접 여쭤봅니다!