Seongwon Lim

[Kotlin] 인텐트(Intent)를 이용하여 데이터 전달하기 본문

Android

[Kotlin] 인텐트(Intent)를 이용하여 데이터 전달하기

limsw 2022. 7. 31. 12:59
반응형

서론

이번 글에서는 코틀린에서 다른 액티비티(Activity)로 데이터를 전달하는 방법을 알아보고자 한다.

액티비티의 데이터 전달은 페이지 이동 시 사용하는 인텐트(Intent) 메서드를 활용하므로 인텐트에 대한 개념이 부족한 분들은 아래 글을 참고하면 좋을 것 같다.

 

 

[Android] 코틀린(Kotlin) Intent를 이용하여 페이지 이동하기

서론 이번 글에서는 코틀린에서 Intent를 사용하여 다른 페이지로 이동하는 기능을 간단하게 구현해보고자 한다. 또한, 간단한 예제이므로 데이터의 이동을 다루지는 않으며 단순히 페이지 슬라

limsw.tistory.com

이번 예제는 메인 액티비티에서 EditText를 통해 2개의 정수를 입력받고, 서브 액티비티로 2개의 값을 넘긴 후 서브 액티비티에서 버튼 클릭 시 2개의 값을 더한 결과를 Toast 메세지를 통해서 나타내는 기능을 구현해볼 예정이다.

activity_main.xml 파일 수정하기

우선 메인 액티비티에서 2개의 정수를 입력 받을 EditText와 페이지 이동에 필요한 버튼을 하나 생성한다.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/value1"
        android:layout_width="194dp"
        android:layout_height="wrap_content" />

    <EditText
        android:id="@+id/value2"
        android:layout_width="194dp"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/btnNewActivity"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Go Second Activity"/>

</LinearLayout>

메인 액티비티의 위젯 구성 결과는 다음과 같다.

 

이제 SecondActivity.kt 파일과 activity_second.xml 파일을 생성하자.

코틀린 파일과 레이아웃 파일을 동시에 생성하는 방법은 MainActivity 파일이 있는 패키지에서 마우스 오른쪽 클릭 후

New → Activity → Empty Activity 클릭한다.

 



그리고 위와 같이 Activity Name을 SecondActivity로 정의하면 레이아웃 파일명 또한 자동적으로 activity_second.xml로 설정된다.

activity_second.xml 파일 수정하기

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btnResult"
        android:text="결과 확인하기"/>

</LinearLayout>

SecondActivity의 레이아웃은 메인으로부터 넘겨받은 2개의 값을 더해서 단순히 메인으로 다시 반환해주는 것이므로 페이지 이동을 위한 버튼 위젯 하나를 생성했다. SecondActivity의 레이아웃 구성은 다음과 같다.

 

이제 데이터 전달을 위한 기능을 구현해보자.

MainActivity.kt 파일 수정하기

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setTitle("First Activity");

        val btnNewButton: Button = findViewById(R.id.btnNewActivity);

        btnNewButton.setOnClickListener {
            val num1: EditText = findViewById(R.id.value1);
            val num2: EditText = findViewById(R.id.value2);

            val intent = Intent(this, SecondActivity::class.java);
            intent.putExtra("Num1", Integer.parseInt(num1.text.toString()));
            intent.putExtra("Num2", Integer.parseInt(num2.text.toString()));
            startActivity(intent)

        }
    }
}
  • putExtra() 메서드를 이용하여 전달할 데이터를 인텐트에 담을 수 있다.
    • 첫번째 인자는 키(Key)값을 의미하고 두번째 인자는 전달할 값(Value)를 의미한다.
  • startActivity() 메서드는 단방향 메서드로 단순히 값을 넘길 때 사용하는 메서드이다.

이제 데이터를 받을 액티비티인 SecondActivity를 수정해보자.

SecondActivity.kt 파일 수정하기

class SecondActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)
        setTitle("Second Activity");

        val inIntent: Intent = getIntent()
        val hapValue = inIntent.getIntExtra("Num1",0) + inIntent.getIntExtra("Num2",0);

        val btnResult: Button = findViewById(R.id.btnResult)


        btnResult.setOnClickListener {
            Toast.makeText(this, "합계 :" + hapValue, Toast.LENGTH_SHORT).show();
        }
    }
}

데이터를 받는 쪽에서는 정수 타입의 데이터를 받을 때에는 getIntExtra() 메서드를 통해서 받을 수 있다.

  • 첫번째 인자에는 키(Key)값을 정의하고, 두번째 인자에는 값이 전달되지 않았을 때 기본 값(Default Value)을 정의한다.
  • 문자열 타입의 데이터를 받을 때에는 getStringExtra() 메서드를 사용한다.

결과 확인하기

 

Comments