Android Kotlin Intent Class Data put, get - Class Data 값 전달, 값 받기
Notepad96
·2021. 10. 31. 04:57
1. 결 과
2. Layout
2-1. activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/btnData"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Class Data 전달"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.31" />
<Button
android:id="@+id/btnDataList"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="214dp"
android:text="Class Data List 전달"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/btnData"
app:layout_constraintVertical_bias="0.0" />
</androidx.constraintlayout.widget.ConstraintLayout>
# 첫번 째 Class Data 버튼 클릭 시 하나의 Class Data만을 intent의 담아서 보낸다.
# 두번 째 Class Data List 전달 버튼 클릭 시 리스트의 담긴 Class Data를 intent의 담아서 보낸다.
2-2. activity_main2.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity2">
<TextView
android:id="@+id/txtGetData"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Test Text"
android:textSize="22sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
3. User.kt (Data Class)
package com.example.intentputdataclass
import android.os.Parcelable
import kotlinx.android.parcel.Parcelize
@Parcelize
data class User(
var name: String,
var age: Int,
var job: String
): Parcelable
{
override fun toString(): String {
return "name:$name, age:$age, job:$job"
}
}
# 전달 하고자 하는 Class 선언부분의 @Parcelize 어노테이션과 Parcelable 인터페이스를 받도록 지정해준다.
4. MainActivity.kt
package com.example.intentputdataclass
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btnData.setOnClickListener {
var intent = Intent(applicationContext, MainActivity2::class.java)
intent.putExtra("user1", User("Kim", 22, "Teacher"))
intent.putExtra("type", 0)
startActivity(intent)
}
btnDataList.setOnClickListener {
var intent = Intent(applicationContext, MainActivity2::class.java)
var users = arrayListOf<User>()
users.add(User("Kim", 22, "Teacher"))
users.add(User("Lee", 26, "Student"))
users.add(User("Park", 29, "Digimon"))
intent.putExtra("type", 1)
intent.putParcelableArrayListExtra("users", users)
startActivity(intent)
}
}
}
# 첫번 째 버튼 클릭 시 User Class Data를 기존 String을 넘겼을 때와 동일하게 putExtra를 사용하여서 넘길 수 있다.
# 두번 째 버튼 클릭시 User Class Data List를 넣어 보내며 이 때는 putParcelableArrayListExtra 함수를 사용한다.
# 해당 예제의 있는 Int형의 type은 보내 온 데이터가 단일인지 리스트인지 구분하기 위해서 넣은 것이다.
5. MainActivity2.kt
package com.example.intentputdataclass
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main2.*
class MainActivity2 : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main2)
if(intent.getIntExtra("type", 0) == 0) {
var user = intent.getParcelableExtra<User>("user1")
txtGetData.text = user.toString()
} else {
var users = intent.getSerializableExtra("users") as ArrayList<User>
var text = ""
for(user in users) {
text += "$user\n"
}
txtGetData.text = text
}
}
}
# type 값에 따라서 단일 값인지 리스트인지 구분하여 처리한다.
# 단일 값일 경우 getParcelableExtra<Class Type>(key) 를 사용하여 값을 받아 올 수 있다.
# 리스트의 경우 getSerializableExtra(key) as ArrayList<Class Type>를 사용하여 Class Data를 담고 있는 ArrayList를 구할 수 있다.
6. 전체 코드
'Android' 카테고리의 다른 글
Android Kotlin Button Style - outline, text button (0) | 2021.12.07 |
---|---|
Android Kotlin Snackbar - 안내 메시지 표시 (0) | 2021.11.01 |
Android Kotlin Intent putExtra, getExtra - 값 전달, 값 받기 (0) | 2021.10.31 |
Android Kotlin Double Click Close - 두 번 클릭하여 종료 (0) | 2021.10.27 |
Android Kotlin RecyclerView Header/Footer - 리사이클러뷰(상하단 레이아웃) (0) | 2021.10.25 |