Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

안드로이드에서 한 액티비티에서 다른 액티비티로 값 전달하는 방법

이 글에서는 데이터를 별도로 저장하지 않고 안드로이드의 한 액티비티(Activity)에서 다른 액티비티로 값을 전달하는 방법을 알아봅니다. 가장 간단하고 널리 쓰이는 두 가지 방식, 즉 정적(Static) 메서드인텐트(Intent)를 활용한 방법을 단계별 예제 코드와 함께 설명합니다.

방법 1. 정적(Static) 메서드 활용하기

아래 예제는 정적 메서드를 사용해 두 액티비티 사이에서 데이터를 주고받는 과정을 보여줍니다.

1단계 — Android Studio에서 새 프로젝트를 생성합니다. 상단 메뉴에서 File → New Project로 이동한 후, 필요한 항목을 모두 입력하여 새 프로젝트를 만듭니다.

2단계 — res/layout/activity_main.xml 파일에 다음 코드를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="16dp"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:hint="전달할 내용을 입력하세요"
        android:inputType="text" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="16dp"
        android:text="다음" />
</LinearLayout>

3단계 — src/MainActivity.java 파일에 다음 코드를 추가합니다.

package com.example.myapplication;

import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    private static String value;

    public static String getValue() {
        return value;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final EditText editText = findViewById(R.id.edit_text);
        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                value = editText.getText().toString().trim();
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent);
            }
        });
    }
}

4단계 — res/layout/activity_second.xml 파일에 다음 코드를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="16dp"
    android:orientation="vertical"
    tools:context=".SecondActivity">

    <TextView
        android:id="@+id/text_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />
</LinearLayout>

5단계 — src/SecondActivity.java 파일에 다음 코드를 추가합니다.

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        TextView textView = findViewById(R.id.text_view);
        textView.setText(MainActivity.getValue());
    }
}

6단계 — androidManifest.xml 파일에 다음 코드를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".SecondActivity"></activity>
    </application>
</manifest>

앱을 직접 실행해 결과를 확인해 봅시다. 실제 안드로이드 기기가 컴퓨터에 연결되어 있다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 연 뒤, 툴바의 Run 안드로이드에서 한 액티비티에서 다른 액티비티로 값 전달하는 방법 아이콘을 클릭합니다. 목록에서 자신의 모바일 기기를 선택하면, 기기 화면에 아래와 같은 기본 화면이 표시됩니다.

안드로이드에서 한 액티비티에서 다른 액티비티로 값 전달하는 방법

참고: 정적 변수는 프로세스가 종료되면 값이 사라질 수 있으며, 잘못 사용하면 메모리 누수의 원인이 되기도 합니다. 따라서 이 방식은 학습용 데모에 적합하며, 실제 앱에서는 아래에서 소개할 인텐트 방식을 사용하는 것이 좋습니다.

방법 2. 인텐트(Intent) 활용하기

이번에는 인텐트에 데이터를 담아 전달하는, 안드로이드에서 가장 표준적인 방법을 살펴봅니다.

1단계 — Android Studio에서 새 프로젝트를 생성합니다. File → New Project로 이동하여 필요한 세부 정보를 모두 입력해 프로젝트를 만듭니다.

2단계 — res/layout/activity_main.xml 파일에 다음 코드를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="16dp"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/edit_text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:hint="전달할 내용을 입력하세요"
        android:inputType="text" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="16dp"
        android:text="다음" />
</LinearLayout>

3단계 — src/MainActivity.java 파일에 다음 코드를 추가합니다.

package com.example.myapplication;

import android.content.Intent;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final EditText editText = findViewById(R.id.edit_text);
        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String value = editText.getText().toString().trim();
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                intent.putExtra("value", value);
                startActivity(intent);
            }
        });
    }
}

4단계 — res/layout/activity_second.xml 파일에 다음 코드를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="16dp"
    android:orientation="vertical"
    tools:context=".SecondActivity">

    <TextView
        android:id="@+id/text_view"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="center" />
</LinearLayout>

5단계 — src/SecondActivity.java 파일에 다음 코드를 추가합니다.

package com.example.myapplication;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        Bundle bundle = getIntent().getExtras();
        if (bundle != null) {
            String value = bundle.getString("value");
            TextView textView = findViewById(R.id.text_view);
            textView.setText(value);
        }
    }
}

6단계 — androidManifest.xml 파일에 다음 코드를 추가합니다.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="com.example.myapplication">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity android:name=".SecondActivity"></activity>
    </application>
</manifest>

실행 방법은 첫 번째 예제와 동일합니다. 실제 안드로이드 기기를 컴퓨터에 연결한 뒤, Android Studio에서 액티비티 파일을 열고 툴바의 Run 안드로이드에서 한 액티비티에서 다른 액티비티로 값 전달하는 방법 아이콘을 클릭합니다. 기기를 선택하면 기본 화면이 나타나고, 입력한 값이 두 번째 액티비티로 정상적으로 전달되는 것을 확인할 수 있습니다.

안드로이드에서 한 액티비티에서 다른 액티비티로 값 전달하는 방법

두 방법 비교 및 마무리

  • 정적 메서드 방식: 구현이 매우 간단하지만, 프로세스 종료 시 값이 유실될 수 있고 메모리 관리 측면에서 권장되지 않습니다. 간단한 학습용 데모에 적합합니다.
  • 인텐트 방식: putExtra()로 데이터를 담아 전달하고 getExtras()로 받아 사용하는, 안드로이드에서 공식적으로 권장하는 표준 방식입니다. 실제 앱 개발에서는 이 방법을 사용하는 것이 가장 안전하고 일반적입니다.