[Android/Kotlin] #Activity간 데이터 전달

2022. 4. 6. 22:40
728x90
반응형

💡 개요


Android 앱을 제작하다 보면 Activity를 이동할 때 값을 전달해줘야 하는 경우가 있다.

그럴 경우 어떻게 하면 값을 전달할 수 있는지 예제를 통해 알아보고자 한다.

 

💡 방법


일단은 보내고자 하는 Activity에서 Intent를 먼저 생성해야 한다.

그 후 putExtra()를 통해 해당하는 Intent로 데이터를 전달할 수 있다.

// Intent 생성
val intent = Intent(this, SubActivity::class.java)

// "str"은 key값, str은 value
intent.putExtra("str", str)

 

 

데이터를 받는 Activity에선 별도의 Intent를 생성하지 않아도 getStringExtra()를 이용해 데이터를 받을 수 있다.

 // Intent로부터 값을 가져온다
 val str = intent.getStringExtra("str")

 

💡 예제


[activity_main.xml] : 입력할 수 있는 EditText와 SubActivity로 이동할 수 있는 Button을 생성

<?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">

    <EditText
        android:id="@+id/etMain"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="50sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btnSub"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        android:text="SubActivity로 전달"
        android:textSize="20sp">
    </Button>

</androidx.constraintlayout.widget.ConstraintLayout>

 

[activity_sub.xml] : MainActivity에서 받은 입력값을 뿌려주기 위한 TextView 생성

<?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">

    <TextView
        android:id="@+id/tvSub"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:hint="hint"
        android:textSize="50sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

 

[MainActivity]

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.EditText

class MainActivity : AppCompatActivity() {
    // activity_main.xml의 EditText를 가지는 변수
    private lateinit var etMain: EditText

    // activity_main.xml의 Button을 가지는 변수
    private lateinit var btnSub: Button

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // Layout과 mapping
        etMain = findViewById(R.id.etMain)
        btnSub = findViewById(R.id.btnSub)

        // Button을 클릭했을 때
        btnSub.setOnClickListener {
            // EditText에서 문자열을 가져오고
            val str = etMain.text.toString()

            // Intent를 생성하고
            val intent = Intent(this, SubActivity::class.java)

            // Intent로 값을 전한다.
            intent.putExtra("str", str)

            // Intent 실행
            startActivity(intent)
        }
    }
}

 

[SubActivity]

import android.os.Bundle
import android.os.PersistableBundle
import android.util.Log
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity

class SubActivity : AppCompatActivity() {
    // activity_sub.xml의 TextView
    private lateinit var tvSub : TextView

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_sub)

        // Intent로부터 값을 가져온다
        val str = intent.getStringExtra("str")

        // 가져온 값을 TextView에 뿌린다
        tvSub = findViewById(R.id.tvSub)
        tvSub.text = str
    }
}

 

💡 결과 화면


Hello World를 입력 후 버튼을 클릭하면 SubActivity에서 데이터를 잘 받는 것을 알 수 있다.

728x90
반응형

BELATED ARTICLES

more