본문 바로가기

문돌이 존버/앱 개발 스터디

코틀린(kotlin) - 검사 앱 결과 화면 완성하기

반응형
본 글은 스파르타 코딩 클럽의 "안드로이드 앱개발 기초반" 강의를 듣고 작성한 개발일지입니다.

이번 시간엔 유형 검사 결과 화면을 추가해보겠습니다.

먼저 New -> Activity -> Empty Activity 를 통해 새로운 액티비티를 추가합니다. 다음으로 MainActivity.kt 파일의 clickSubmit 함수에 방금 추가한 액티비티 화면을 띄우도록 하겠습니다.

// MainActivity.kt
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    fun clickSubmit(view: View) {
        var barQ1: SeekBar = findViewById(R.id.barQ1)
        var answer1 = barQ1.progress
        // 추가
        var intent = Intent(this, ResultActivity::class.java)
        intent.putExtra("TypeKey", answer1)
        startActivity(intent)
    }
}
clickSubmit 함수를 적용하기 위해선 activity_main.xml 파일에서 버튼(Button) 부분에 android:onClick="clickSubmit" 을 추가해줘야 합니다.

위에서 전달한 값이 ResultActivity 에 잘 넘어오는지 확인해보겠습니다. 지난 번에는 getStringExtra 를 사용해서 확인했는데, 이번엔 getIntExtra 를 사용했습니다.

// ResultActivity.kt
class ResultActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_result)

        var typeKey = intent.getIntExtra("TypeKey", -1)
        Toast.makeText(this, "TypeKey: ${typeKey}", Toast.LENGTH_SHORT).show()
    }
}

강의에서 미리 제공한 탬플릿 코드를 activity_main.xml 파일에 적용하면 아래와 같은 레이아웃이 나옵니다.

총 4가지 설문 사항이 있고, 각각 progress 범위는 1 ~ 5입니다. 모두 SeekBar 가 적용되어 있고, 각 SeekBar 값을 받아오는 코드는 아래와 같습니다.

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    fun clickSubmit(view: View) {
        var barQ1: SeekBar = findViewById(R.id.barQ1)
        var answer1 = barQ1.progress
        var barQ2: SeekBar = findViewById(R.id.barQ2)
        var answer2 = barQ2.progress
        var barQ3: SeekBar = findViewById(R.id.barQ3)
        var answer3 = barQ3.progress
        var barQ4: SeekBar = findViewById(R.id.barQ4)
        var answer4 = barQ4.progress
        Toast.makeText(this, "${answer1}, ${answer2}, ${answer3}, ${answer4}", Toast.LENGTH_SHORT).show()
    }
}

이제 answer1 ~ answer4 변수들을 계산해서 유형 타입을 구분하여 토스트 메시지로 확인해보겠습니다.

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    fun clickSubmit(view: View) {
        var barQ1: SeekBar = findViewById(R.id.barQ1)
        var answer1 = barQ1.progress
        var barQ2: SeekBar = findViewById(R.id.barQ2)
        var answer2 = barQ2.progress
        var barQ3: SeekBar = findViewById(R.id.barQ3)
        var answer3 = barQ3.progress
        var barQ4: SeekBar = findViewById(R.id.barQ4)
        var answer4 = barQ4.progress

        var scoreSF = (answer1 + answer4) / 2
        var scorePE = (answer2 + answer3) / 2
        Toast.makeText(this, "${scoreSF}, ${scorePE}", Toast.LENGTH_SHORT).show()
    }
}
코틀린에선 Int를 Int로 나누게 되는 경우 결과 값인 Int로 저장되며 반올림이 아니라 버림이 됩니다.
소숫점이 필요하다면 Float 타입을 활용해야 합니다. 
만약 저장된 변수가 Int인 경우 toFloat() 함수를 이용하면 됩니다.
ex) num.toFloat() / 2.0

728x90
반응형