안드로이드 스튜디오 :: Kotlin :: Activity(화면)간 값 전달하기

Android/Kotlin 2020.06.22 댓글 moonsu
728x90

("안드로이드 스튜디오 :: Activity(화면) 전환하기 #1" 참조) 

안드로이드 스튜디오에서 Activity간의 데이터(값)를 주는 방법을 알아보자

 

1. 테스트를 위해 전달할 값을 입력할 EditText필드 두 개와 전달 버튼 하나를 만들어준다.

activity_main.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=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <EditText
            android:id="@+id/id"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="text"
            tools:ignore="LabelFor"
            android:hint="ID"
            android:importantForAutofill="no" />

        <EditText
            android:id="@+id/number"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:inputType="number"
            tools:ignore="LabelFor"
            android:hint="number"
            android:importantForAutofill="no" />


        <Button
            android:id="@+id/button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="버튼1"/>

    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

 

 

id와 회원번호(number)를 입력할 EidtText필드와

2번째 액티비티를 생성시켜 값을 넘겨줄 버튼 1개 생성

안드로이드 스튜디오 :: 앱 만들기 기초 #3 (버튼 만들기)

 

 

 

 

 

 

2. 값을 전달받을 새로운 액티비티를 만든다.

(1) File > New > Activity > Empty Activity를 클릭해서 새로운 액티비티를 추가한다.

액티비티를 추가하면 자동으로 관련 레이아웃 파일이 생성된다. 값을 제대로 전달받았는지 확인하기 위해 TextView를 만든다.

<RelativeLayout
    android:layout_height="match_parent"
    android:layout_width="match_parent">

    <TextView
        android:id="@+id/data"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content" />

</RelativeLayout>

 

(2) Manifest 파일 수정

파일 경로 (app > manifests > AndroidManifest.xml)를 통해 매니페스트 파일을 열면 생성한 SubActivity.class에 관련된 코드가 자동으로 삽입되어 있는 것을 볼 수 있다.

<application
    ...
    <activity android:name=".SubActivity"></activity>
    ...
</application>

여기에 parentActivityName 속성을 추가하여 액티비티 상단에 뒤로가기 아이콘을 표시한다. 취소버튼으로도 동일한 기능을 할 수 있지만 이전 액티비티와의 상관관계를 더 직관적으로 보여주고 사용자에게 편의성을 제공할 수 있다.

<application
    ...
    <activity
        android:name=".SubActivity"
        android:parentActivityName=".MainActivity"></activity>        
    ...
</application>

 

 

 

3. 값을 저장하고 새로운 액티비티(화면)를 띄운다.

(1) MainActivity.kt

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)

        button1.setOnClickListener{
            val intent = Intent(this, SubActivity::class.java)

            intent.putExtra("id", id.text.toString())
            intent.putExtra("number", number.text.toString())
            
            startActivity(intent)
        }
    }
}

 

(2) MainActivity.kt (feat. Anko 라이브러리) (안드로이드 스튜디오 :: Anko 라이브러리 설치하기)

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
import org.jetbrains.anko.startActivity

class MainActivity : AppCompatActivity() {

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

        button1.setOnClickListener{
            startActivity<SubActivity>(
                "id" to id.text.toString(),
                "number" to number.text.toString()
            )
        }
    }
}

 

 

 

4. 전달한 값 가져오기

(1) SubActivity.kt

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)

        val id = intent.getStringExtra("id")
        val number = intent.getStringExtra("number").toInt()

        data.text = "id는 " + id + ", 회원번호는 " + number
    }
}

데이터가 잘 전달되는 것을 확인할 수 있습니다.

 

안드로이드 스튜디오 :: Activity(화면) 전환하기 #1

안드로이드 스튜디오 :: Anko 라이브러리 설치하기

안드로이드 스튜디오 :: 앱 만들기 기초 #3 (버튼 만들기)

728x90
반응형

댓글