안드로이드 코틀린 : Activity 전환 할 때 데이터 넘기기
Lucy Archive
Lucy / Facilitate4U
2021. 3. 10. 14:31

Android Kotlin :데이터 포함하여 Activity 전환하기

지난 포스트에서 Intent를 활용하여 Activity를 전환하는 방법을 소개하였습니다. 이번 포스트는

Activity 전환시 데이터를 포함하는 방법

을 소개합니다. Intent를 활용하여 Activity를 전환하는 방법은 이전 포스트를 참고해주세요.

Intent를 활용하여 Activity 전환하기

 

안드로이드 코틀린 : Intent를 사용하여 Activity 화면 전환

Android Kotlin : Activity 화면 전환 하기 Activity 앱의 단일 화면을 나타내는 안드로이드 4개 구성 요소 중의 하나입니다. 일반적으로 우리가 사용하는 앱은 하나의 액티비티 또는 다수의 액티비티로

juahnpop.tistory.com

 

개발환경 및 버전 정보

  • Android Studio 4.1.2
  • Kotlin Version 1.4.31

 

프로젝트 생성 및 환경 설정

프로젝트 생성

안드로이드에서 새로운 프로젝트를 생성합니다.

  • 템플릿 : Empty Activity
  • 프로젝트명 : StartActivityWithData

안드로이드 스튜디어 프로젝트 생성

build.gradle(Module) 설정

App > Gradle.Scripts > build.Gradle(Module) 파일의 plugins에 id 'kotlin-android-extensions'를 추가합니다. 플러그인을 추가하고 Sync Now를 선택합니다.

build.gradle(Module) 선택

※ kotlin-android-extensions 는 레이아웃 View의 id를 코틀린 코드에서 바로 사용 할 수 있도록 해주는 플러그인입니다. 해당 플러그인은 2021년 지원이 종료 될 예정입니다. 참고해주세요. kotlin-android-extensions 를 대체하는 View Binding 방법은 아래의 링크를 참조해주세요.

안드로이드 View Binding 사용하기

 

안드로이드 View Binding 사용하기 - kotlin-android-extensions 지원 중단

안드로이드 View Binding 방법 정리 안드로이드 코드에서 레이아웃 View에 접근하기 위해 사용된 kotlin-android-extensions 의 지원이 중단예정으로, 이를 대체하여 사용 할 수 있는 ViewBinding 사용법에 대해

juahnpop.tistory.com

 

UI 만들기

activity_main.xml 레이아웃 만들기

app > res > layout > activity_main.xml 에서 아래와 같이 코드를 작성합니다. MainActivity 화면에 있는 버튼을 누르면 EditText에 입력된 데이터를 SubActivity로 전달할 예정입니다.

<?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/editText"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:layout_marginStart="20dp"
        android:layout_marginTop="352dp"
        android:layout_marginEnd="20dp"
        android:hint="텍스트를 입력하세요"
        app:layout_constraintBottom_toTopOf="@+id/btnGoSubActivity"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btnGoSubActivity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="236dp"
        android:text="Go SubActivity"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

activity_main.xml 레이아웃

SubActivity 생성

app > java 폴더에서 마우스 우클릭후 Empty Activity 추가합니다. 추가할 액티비티의 이름은 SubActivity로 지정합니다.

SubActivity 생성

SubActivity 가 생성되면 코드가 있는 폴더에 SubActivity.kt, 레이아웃이 있는 폴더에 activity_sub.xml 이 추가된 것을 확인 할 수 있습니다.

액티비티 생성 확인

activity_sub.xml 레이아웃 만들기

app > res > layout > activity_sub.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=".SubActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_margin="20dp"
        android:layout_marginStart="20dp"
        android:layout_marginTop="352dp"
        android:layout_marginEnd="20dp"
        android:text="수신된 문자열"
        android:textSize="20sp"
        android:gravity="center"
        app:layout_constraintBottom_toTopOf="@+id/btnClose"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btnClose"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="236dp"
        android:text="Close"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

activity_sub.xml 레이아웃

코드 작성

동작 시나리오

  • MainActivity
    • 버튼을 누르면 SubActivity를 시작
    • editText에 입력된 문자열을 SubActivity로 전달
  • SubActivity
    • SubActivity가 실행시 수신된 문자열을 testView에 표시
    • 버튼이 눌러지면 SubActivity 종료

MainActivity 와 SubActivity 동작 설명

MainActivity.kt 코드 작성

MainActivity.kt 의 코드는 아래와 같이 작성합니다.

package com.blacklog.startactivitywithdata

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)

        btnGoSubActivity.setOnClickListener {
            val text = editText.text.toString()
            val intent = Intent(this, SubActivity::class.java)
            intent.putExtra("Data", text)
            startActivity(intent)
        }
    }
}

intent를 사용하여 액티비티간 데이터를 넘기고 싶은 경우 putExtra 메소드를 사용하면 됩니다. putExtra 메소드의 인자는 아래와 같이 key 와 data 를 함께 보내고, 수신되는 쪽에서 key(String)를 사용하여 데이터를 받을 수 있습니다.  

  • Intent.putExtra(key, data)

SubActivity.kt 코드 작성

SubActivity.kt 의 코드는 아래와 같이 작성합니다.

package com.blacklog.startactivitywithdata

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_sub.*

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

        textView.text = intent.getStringExtra("Data")

        btnClose.setOnClickListener {
            finish()
        }
    }
}

startActivity(intent)를 사용해 Activity가 실행되면 intent 객체가 전달됩니다. 실행된 Activity에서 intent에 포함된 데이터를 수신하고 싶은 경우 get~Extra() 메서드와 key 값을 사용하여 수신할 수 있습니다. 위의 코드에서 전달된 데이터가 문자열이기 때문에 getStringExtra() 메서드를 사용하였습니다. 번들에 저장된 변수의 타입에 따라 아래와 같은 메서드등이 사용 될 수 있습니다.

  • getBooleanExtra(key, defaultValue)
  • getIntExtra(key, defaultValue)
  • getStringExtra(key)
  • getFloatExtra(key, defaultValue)
  • getDoubleExtra(key, defaultValue)

실행 결과

코드 작성 완료 후 Android Studio 상단 툴바에서 앱 실행 버튼을 클릭하면 아래와 같이 애뮬레이터에서 앱이 실행되는 것을 확인 할 수 있습니다.

앱 실행 버튼
앱 실행 화면

※ 애뮬레이터 설정 방법은 아래의 링크를 참조해주세요.

안드로이드 스튜디오 애뮬레이터 추가

 

안드로이드 코틀린 앱 개발 시작하기 Hello World

#01안드로이드 앱 시작 Hello World 일단 따라하기 Android Studio + Kotlin 언어를 사용한 Hello World 앱 따라하기 입니다. 버튼을 생성하고, 버튼을 터치하면 Hello World 메세지를 출력하는 간단한 앱입니다...

juahnpop.tistory.com

 

요약 : Activity 화면 데이터 전달

  • MainActivity
    • 전환하고자 하는 Activity를 포함하는 Intent 인스턴스 생성
    • 생성된 Intent 인스턴스에 putExtra() 함수를 사용하여 데이터 추가
    • startActivity() 함수의 인자로 Intent 인스턴스 포함하여 안드로이드에 액티비티 시작 요청
  • SubActivity
    • 전달된 intent에서 get*Extra() 메소드를 사용하여 데이터를 수신
관련포스트

🤞 안드로이드 앱 제작 관련글 목록 보기

🤞 안드로이드 Intent 관련글 목록 보기

🤞 안드로이드 Actiity 관련글 목록 보기