728x90
Parcelabel
Intent 를 통해 객체를 전달 할 때는 객체 직렬화를 해야 하는데 안드로이드는 Parcelable 인터페이스를 사용한다.
Parcelable 인터페이스는 전달 받은 쪽에서 객체를 복원할 때 필요한 정보를 가진 부분을 의미한다.
메인 액티비티
package com.example.activityobject
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.activity_second.*
class MainActivity : AppCompatActivity() {
val SECOND_ACTIVITY = 0
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
val second_intent = Intent(this,SecondActivity::class.java)
val t1 = TestClass()
t1.data1=100
t1.data2="문자열"
second_intent.putExtra("obj1",t1)
startActivityForResult(second_intent,SECOND_ACTIVITY)
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == SECOND_ACTIVITY) {
if (resultCode == RESULT_OK) {
// 객체를 추출
val obj2 = data?.getParcelableExtra<TestClass>("obj2")
textView.text = "obj2.data1 ; ${obj2?.data1}\n"
textView.append("obj2.data1 ; ${obj2?.data2}")
}
}
}
}
세컨드 액티비티
package com.example.activityobject
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
import kotlinx.android.synthetic.main.activity_second.*
class SecondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
// 제네릭 설정 (전송한 객체 타입으로 설정)
val obj1 = intent.getParcelableExtra<TestClass>("obj1")
textView2.text = "obj1.data1 : ${obj1?.data1}\n"
textView2.append("obj1.data2 : ${obj1?.data2}")
button2.setOnClickListener {
val t2 = TestClass()
t2.data1 = 200
t2.data2 = "문자열2"
val result_intent = Intent()
result_intent.putExtra("obj2",t2)
setResult(RESULT_OK,result_intent)
finish()
}
}
}
전달하는 오브젝트
package com.example.activityobject
import android.os.Parcel
import android.os.Parcelable
class TestClass() : Parcelable{
var data1:Int = 0;
var data2:String? = ""
constructor(parcel: Parcel) : this() {
data1 = parcel.readInt()
data2 = parcel.readString()
}
// putExtra를 이용해 객체를 intent에 담는 작업을 할 경우 호출되는 메서드
// 객체가 intent에 저장되는 것이 아닌 객체를 구성하는 변수의 값이 저장된다.
override fun writeToParcel(parcel: Parcel, flags: Int) {
parcel.writeInt(data1)
parcel.writeString(data2)
}
override fun describeContents(): Int {
return 0
}
companion object CREATOR : Parcelable.Creator<TestClass> {
override fun createFromParcel(parcel: Parcel): TestClass {
return TestClass(parcel)
}
override fun newArray(size: Int): Array<TestClass?> {
return arrayOfNulls(size)
}
}
}
728x90
'안드로이드 > Activity' 카테고리의 다른 글
안드로이드 Activity Action (0) | 2022.06.09 |
---|---|
안드로이드 다른 애플리케이션의 액티비티 실행 (0) | 2022.06.09 |
안드로이드 activity 데이터 전달 (0) | 2022.06.09 |
안드로이드 OnActivityResult (0) | 2022.06.09 |
안드로이드 Activity 실행하기 (0) | 2022.06.09 |