728x90
안녕하세요. 이번 시간에는 코틀린으로 안드로이드에서 Intent로 객체를 전달하는 방법을 알아보도록 하겠습니다.
기능을 구현하기 전에 해당 기능이 무엇이고 왜 사용하는지 짚고 넘어가야겠죠?
An Intent is a messaging object you can use to request an action from another app component.
안드로이드 공홈에 나와있는 인텐트의 정의입니다.
글을 정리해보면 인텐트란 다른 안드로이드 컴포넌트에게 액션을 요청하는 메시지 객체라고 할 수 있습니다. 안드로이드를 개발하면 액티비티에서 다른 액티비티로 이동하거나 서비스, 브로드캐스트 컴포넌트를 사용할 때 대게 해당 컴포넌트를 실행시키는 것 뿐만 아니라 데이터를 넘겨주고 싶은 경우가 있습니다. 이때 단순히 원시형 데이터 값 뿐만 아니라 객체를 전달하고 싶은 경우가 있습니다.
우선 Intent로 전달할 객체는 Serializable를 구현해야 합니다.
import java.io.Serializable
data class User(
val name : String,
val phoneNumber : String,
val address : String
) : Serializable
이렇게 사전에 정의한 User 클래스의 객체를 보내는 곳에서는 다음과 같이 작성해주면 됩니다.
// 보내는 곳
// NextActivity : 넘기고자 하는 Component
val intent = Intent(this, NextActivity::class.java)
intent.putExtra("object", user)
startActivity(intent)
// 받는 곳
val intent = intent
val user = intent.getSerializableExtra("object") as User? // 직렬화된 객체를 받는 방법
전체 코드는 다음과 같습니다.
MainActivity
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val user = User("StickCode", "010-0000-1111", "동작구") // User 객체 생성
Logger.d("MainActivity _ user 객체 :$user")
// NextActivity : 넘기고자 하는 Component
val intent = Intent(this, NextActivity::class.java)
intent.putExtra("object", user)
startActivity(intent)
}
}
NextActivity
class NextActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_next)
val intent = intent
val user = intent.getSerializableExtra("object") as User? // 직렬화된 객체를 받는 방법
Logger.d("NextActivity _ user 객체 :$user")
Logger.v("User name :" + user!!.name)
}
}
User
data class User(
val name : String,
val phoneNumber : String,
val address : String
) : Serializable
코드 중간중간에 보이는 Logger 라이브러리는 아래 포스팅을 이용하시면 해당 프로젝트에 편한게 적용하여 사용하실 수 있습니다.
https://stickode.tistory.com/257
https://stickode.com/detail.html?no=2519
결과
해당 데이터를 MainActivity 나 NextActivity에서 받아올 수 있습니다.
'안드로이드 코틀린' 카테고리의 다른 글
[Kotlin][Android] 리사이클러뷰 안에 뷰페이저 넣기 (0) | 2022.03.07 |
---|---|
[Kotlin][Android] 간단한 중첩 리사이클러뷰 만들기 (0) | 2022.02.27 |
[Kotlin][Android] Fragment에서 registerForActivityResult() 사용해 액티비티 결과 받기 (0) | 2022.02.24 |
[Kotlin][Android] 리사이클러뷰 (0) | 2022.02.19 |
[Kotlin][Android] 텍스트뷰 생략 옵션 동적으로 변경하기 (0) | 2022.02.15 |