Android Kotlin Intent Class Data put, get - Class Data 값 전달, 값 받기

Notepad96

·

2021. 10. 31. 04:57

300x250

 

 


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를 사용하여서 넘길 수 있다.

 

 

Android Kotlin Intent putExtra, getExtra - 값 전달, 값 받기

1. 결 과 2. Layout 2-1. activity_main.xml 2-2. activity_main2.xml 3. MainActivity.kt package com.example.intentputdata..

notepad96.tistory.com

 

# 두번 째 버튼 클릭시 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. 전체 코드

 

 

GitHub - Notepad96/BlogExample

Contribute to Notepad96/BlogExample development by creating an account on GitHub.

github.com

 

 

300x250