본문 바로가기
Android Studio

[Android 앱개발 입문] 액티비티 간의 데이터 전달 (# 추가하기)

by 젼젼39 2024. 3. 21.

1. 데이터 전달

    - 인텐트에 컴포넌트 실행을 요청할 때 데이터를 함께 전달하려면 엑스트라 데이터(인텐트에 담는 부가정보) 이용

    - 이름과 값의 쌍으로 된 정보를 전달

 

2. Extras에 값을 저장하는 메소드

Intent putExtra(String name, int value)
Intent putExtra(String name, String value)
Intent putExtra(String name, boolean value)

 

3. Extras에 저장된 값을 읽는 메소드

int getIntExtra(String name, int defaultValue)
String getStringExtra(String name)
boolean getBooleanExtra(String name, boolean defaultValue)

 

 

(데이터 입력받고 세번째 액티비티에 데이터 전달하는 코드)

1) activity_first.xml에서 코드 추가

    (데이터를 입력받을 수 있는 EditText 위젯과 세번째 액티비티를 호출할 Button 위젯을 수평으로 배열시키는
        LinearLayout 추가)

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <EditText
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/edit_data"
            android:layout_weight="1"
            android:hint="데이터 입력"/>
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="세번째 액티비티에 데이터 전달"
            android:id="@+id/buttonThirdActivity"/>
    </LinearLayout>

 

2) FirstActivity.kt 파일에 세 번째 액티비티 시작시키기 위한 명시적 인텐트 객체 생성 코드 추가해주기

    (해당 버튼이 클릭되었을 때 인텐트 객체 생성, id가 edit_data인 EditText 객체에 입력된 문자열 가져와서
        이를 앞에서 생성한 인텐트 객체의 Extra에 "dataFromFirstActivity" 이름으로 설정,
            startActivity() 의 파라미터로 인텐트 객체 전달)

        //명시적 인텐트
        val btn_call3 = findViewById<Button>(R.id.buttonThirdActivity)
        btn_call3.setOnClickListener {
            //id가 edit_data인 EditText 객체
            val edit_text = findViewById<EditText>(R.id.edit_data)
            //그 객체 안에 입력된 문자열 값을 가져옴
            val strData = edit_text.text.toString()
            //인텐트 객체 생성 (세번째 액티비티를 여기서 실행할거다)
            val intent = Intent(this, ThirdActivity::class.java)
            //가져온 문자열 값을 앞에서 생성한 인텐트 객체의 Extra에 설정 (이름은 dataFromFirstActivity로 설정)
            intent.putExtra("dataFromFirstActivity",strData)
            //startActivity()의 파라미터로 인텐트 객체 전달
            startActivity(intent)

        }

3) activity_third.xml 파일 수정

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ThirdActivity"
    android:gravity="center"
    android:orientation="vertical">

  <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="세번째 액티비티입니다."
      android:id="@+id/textView2"/>
  <EditText
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:id="@+id/editText"
      android:inputType="text"/>
  <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="닫기"
      android:id="@+id/buttonThirdActivity"/>

  </LinearLayout>

4) ThirdActivity.kt 파일에 코드 추가

    (ThirdActivity로 전달된 데이터를 Extra에서 가져와 EditText뷰에 표시)
    (버튼이 클릭되면 finish() 메소드 호출해 현재의 액티비티 종료되는 버튼 클릭 이벤트 처리기 추가)

package com.example.acrivityintent2

import android.os.Bundle
import android.widget.Button
import android.widget.EditText
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat

class ThirdActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_third)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }
        
		//"dataFromFirstActivity" 는 키값. 키값으로 데이터를 받아오는 것
        val strData = intent.getStringExtra("dataFromFirstActivity")
        val editText = findViewById<EditText>(R.id.editText)
        //set -> 받아온 데이터를 넣어줌. (뿌려줌?)
        editText.setText(strData)

        val btn_close = findViewById<Button>(R.id.buttonThirdActivity)
        btn_close.setOnClickListener {
            finish()
        }
    }
}