1. Android Studio에서 기본 프로젝트(with empty activity) 생성하자!

생성시 'Empty Activity'로 기본 생성

 
 

2. SubActivity 생성

Activity 가 하나의 화면을 보여주는 것이므로 Intent로 전환될 Sub 화면 Activity 도 하나더 생성해보자
생성하는 방법은 다음과 같다.

  1. Android Studio 파일 트리 화면의 Package 명에서 마우스 우클릭

  2. New -> Acitivty -> Empty Activity 클릭

  3. Activity 생성 화면에서 SubActivity로 이름을 정하고 Finish를 해보자

 
 

3. 여기까지 해서 기본 파일들은 준비완료 + ViewBinding 설정

Activity는 (xml, kt) 파일이 쌍으로 존재하므로 2개의 Activity, 총 4개의 파일이 만들어졌다.
추가로, ViewBinding 설정을 위해서 build.gradle에 다음과 같은 코드를 Enable 시킨다.

  android {
          // 뷰 바인딩 옵션 활성화
          viewBinding {
              enabled = true
          }
      }

 
 

4. activity_main.xml

기본 생성된 xml에서 TextView "Hello World!"는 그대로 두고, 화면 전환을 위한 버튼만 하나 추가로 만들어보자

<?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">

    <TextView
        android:id="@+id/tv_sendMsg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/btn_a"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="서브화면으로 이동"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/tv_sendMsg" />

</androidx.constraintlayout.widget.ConstraintLayout>

 
 

5. activity_sub.xml

서브 Activity라는 것을 표현하기위한 TextView를 하나 만들고 text="서브 액티비티"로 입력해놓자

<?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/tv_getMsg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="36dp"
        android:text="서브 액티비티"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

 
 

6. MainActivity.kt

Binging Class 를 통한 ViewBinding 변수 설정 후, 화면 전환 버튼에 대한 setOnClickListener 를 걸어둔다.
Listener 내부 구현으로 SubActivity 에 대한 Intent 객체를 생성.
putExtra : Intent를 통해 액티비티를 전환할 때에 putExtra를 통해 String이나 Int 등 간단한 데이터를 전달할 수 있다.
첫번째 param 이 넘겨질 데이터에 대한 key_value 이고, 두번째 param 이 실제 넘겨질 Data 가 되겠다.

class MainActivity : AppCompatActivity() {

    private var mBinding:ActivityMainBinding? = null
    private val binding get() = mBinding!!

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //setContentView(R.layout.activity_main)
        mBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.btnA.setOnClickListener{
            // 다음 화면으로 이동하기 위한 인텐트 객체 생성
            val intent = Intent(this, SubActivity::class.java)
            // hello world 라는 텍스트를 msg 라는 키로 잠금.
            intent.putExtra("msg", binding.tvSendMsg.text.toString())

            // intent에 저장되어 있는 액티비티로 이동
            startActivity(intent)

            // 자기 자신의 액티비티를 파괴한다.
            //finish()
        }
    }
}

 
 

7. SubActivity.kt

MainActivity와 마찬가지로 SubActivity에서도 Binging Class 를 통한 ViewBinding 변수 설정.
hasExtra("key_value") : null check 를 하지 않으면 0이나 null 등 잘못된 값을 꺼내올 수 있으므로, 해당 key가 전달할 값을 가지고 있는지 if hasExtra로 체크를 해보자.
getStringExtra("key_value") : 여러 데이터타입의 get 함수가 있으나 우리가 넘겨준 타입은 String이므로 getStringExtra 로 데이터를 가져올 수있다.
받아온 String 값으로 SubActivity에 있는 TextView 값을 변경해보자 (text="Hello World!")

class SubActivity : AppCompatActivity() {

    private var mBinding: ActivitySubBinding? = null
    private val binding get() = mBinding!!

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        //setContentView(R.layout.activity_main)
        mBinding = ActivitySubBinding.inflate(layoutInflater)
        setContentView(binding.root)

        if(intent.hasExtra("msg")){
            // 서브 액티비티의 존재하는 텍스트뷰에 hello world가 넘겨짐.
            binding.tvGetMsg.text = intent.getStringExtra("msg")
        }

    }
}

 
 

8. 실행결과

activity_sub.xml 에 처음 정의해놓았던 text 값인 "서브 액티비티" 가 화면이 전환됨과 동시에 "Hello World!" 바뀌어 화면에 보여준다.
이로써 두 Activity간에 간단한 데이터도 전달해보는 화면 전환 실행 완료!

 
 

Reference

유투버 홍드로이드님의 안드로이드 코틀린 앱 만들기 #3

+ Recent posts