본문 바로가기

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

코틀린(kotlin) - 새로운 액티비티(Activity) 시작하기

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

오늘은 성격 유형에 대한 앱을 가지고 공부해보겠습니다.

먼저 Toast 메시지에 대해 조금 자세히 살펴보겠습니다.

// MainActivity.kt
fun clickIstj(view: View) {
        Toast.makeText(view.context, "진정한 데이터 사이언티스트", Toast.LENGTH_LONG).show()
    }
view.context: 앱이 어떤 상태에 있는지를 토스트에게 알려주기 위해 전달하는 값
Toast.LENGTH_LONG: 토스트가 노출되는 시간 설정 <-> Toast.LENGTH_SHORT

이제 새로운 액티비티를 추가해보겠습니다. File -> New -> Activity -> Empty Activity 를 클릭하시면 새로운 액티비티를 생성할 수 있습니다.

<TextView
  android:id="@+id/textView"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="진정한 데이터 사이언티스트"
  app:layout_constraintBottom_toBottomOf="parent"
  app:layout_constraintLeft_toLeftOf="parent"
  app:layout_constraintRight_toRightOf="parent"
  app:layout_constraintTop_toTopOf="parent" />
// MainActivity.kt
fun clickIstj(view: View) {
    Toast.makeText(view.context, "진정한 데이터 사이언티스트", Toast.LENGTH_LONG).show()
    var intent = Intent(this, lstjActivity::class.java)
    startActivity(intent)
}
Intent: - 개별 앱 컴포넌트 간 런타임 바인딩을 제공하는 객체
         - 다양한 작업에서 활용 가능하지만, 주로 다른 액티비티를 시작할 때 사용
this: 현재 코드가 적혀있는 곳을 의미
lstjActivity: 도착지 액티비티
::class.java: 참조를 위한 class 값을 의미
ex) 0 vs "0" <- 타입 차이 명시


액티비티를 시작할 때 데이터를 전달하는 작업을 시도해보겠습니다. 위에서 Intent 는 어떤 작업을 하겠다는 "의도"를 나타내는데요, 이때 내가 주고 싶은 정보도 담아서 전달할 수 있습니다. 

// MainActivity.kt
fun clickIstj(view: View) {
    // Toast.makeText(view.context, "진정한 데이터 사이언티스트", Toast.LENGTH_LONG).show()
    var intent = Intent(this, lstjActivity::class.java)
    intent.putExtra("PersonalKey", "ISTJ") // 추가
    startActivity(intent)
}
putExtra(key, value): key - 다른 화면에서 데이터를 확인할 때 쓰는 값
                           value - 전달하려는 값
// lstjActivity.kt
var personalKey = intent.getStringExtra("PersonalKey")
Toast.makeText(this, personalKey, Toast.LENGTH_LONG).show()
getStringExtra(key): Intent에 담겨있는 데이터를 확인하는 방법
Toast.makeText(this): "어디서" 보여줘야 하는지를 표현

(참고)
- Intent와 Toast.makeText의 첫 번째 값은 "컨텍스트(context)"를 전달해줘야 함
- 컨텍스트는 현재 상태의 맥락을 의미
- this는 현재 액티비티의 컨텍스트를 사용하겠다는 의미, view.context는 뷰에 담겨 있는 컨텍스트를 사용하겠다는 의미
- 뷰에는 뷰를 생성할 때 사용된 컨텍스트가 들어있고, 일반적으로 뷰가 속해있는 액티비티의 컨텍스트가 들어가게 됨

전달받은 값을 토스트 메시지가 아닌 TextView 를 이용해 표시해보겠습니다.

class lstjActivity : AppCompatActivity() {
    private lateinit var textView: TextView // 추가
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_lstj)

        var personalKey = intent.getStringExtra("PersonalKey")
        // Toast.makeText(this, personalKey, Toast.LENGTH_LONG).show()
        textView = findViewById(R.id.textView) // 추가
        textView.text = personalKey // 추가
    }
}

토스트 메시지가 아닌 TextView 형태로 putExtra 로 전달한 "ISTJ"가 나오는 것을 확인할 수 있습니다. 참고로 숫자인 Int나 Boolean 값을 전달받을 때는 각각 getIntExtra, getBooleanExtra를 사용하면 됩니다.

다음 시간엔 모든 성격 유형 버튼에 동작을 구현해보겠습니다.

728x90
반응형