퀴즈 앱 만들기 - 3

Purang·2022년 5월 9일
0

Android Studio

목록 보기
3/28

오늘은 문제와 간단한 토스트 메세지 남기기를 해보겠습니다.

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과 문제가 잘 넘어가는 지 등을 공부해보도록 해보겠습니다.

profile
몰입의 즐거움

1개의 댓글

comment-user-thumbnail
2022년 11월 9일

안녕하세요! 우연히 같은 영상을 보다 검색을 하고 하고 들어오게 되면서 감사히 참고하고 있습니다! 질문을 하나 하고자 하는데요~ 랜덤으로 출력되게 하신다고 코드를 올려주셨는데
val ran = set.random() 이 부분에서 저는 set. 이 부분이 오류가 나더라고요.. 함수 호출 필요와 비슷한 타입을 찾을 수 없다고만 해서요. 저의 검색 능력에는 나오지 않아서 직접 여쭤봅니다!

답글 달기