본문 바로가기
ⓢⓣⓤⓓⓨ/ⓐⓝⓓⓡⓞⓘⓓⓢⓣⓤⓓⓘⓞ

[Kotlin] 화면이동 intent

by heaven00 2021. 8. 23.
728x90

 

 

 

 

 

 

우선 결과물을 보여주자면, 

 

 

 

이런 메인 화면이 실행된다. 여기서 서브화면으로 이동 버튼을 클릭하면

 

 

 

메인화면 textview에 적혀있던 문자가 크게 변경되어 화면에 나타나는 것을 확인할 수 있다.

 

 

 

따라서 이는 xml도 2개, Activity도 2개가 필요하다

 

 

 

 

 

 

 

1. 실행 첫화면 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">

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

    <Button
        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>

 

 

 

 

 

 

2. 실행 첫화면 Activity 코드

 

package com.example.myapplication

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.myapplication.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    //바인딩 객체 선언
    private var mBinding: ActivityMainBinding ?= null
    private val binding get() = mBinding!!

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        //바인딩 초기화
        mBinding = ActivityMainBinding.inflate(layoutInflater)

        // 생성된 뷰 액티비티에 표시시
       setContentView(binding.root)


        binding.btnA.setOnClickListener {

            //다음화면으로 이동하기 위한 인텐트 객체 생성
            val intent = Intent(this, SubActivity::class.java)

            //HelloWorld라는 텍스트 값을 담음
            intent.putExtra("msg", binding.tvSendMsg.text.toString())
            startActivity(intent)   //intent에 저장되어 있는 엑티비티 쪽으로 이동한다
            finish() //자기 자신 액티비티 파괴

        }
    }

    override fun onDestroy() {
        mBinding = null
        super.onDestroy()
    }
}

 

 

 

 

 

3. 버튼 클릭 후 이동되는 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=".SubActivity">

    <TextView
        android:id="@+id/tv_getMsg"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="서브액티비티"
        android:textSize="36dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

 

 

 

 

 

 

 

4. 버튼 클릭 후 이동되는 Activity 코드

 

package com.example.myapplication

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.myapplication.databinding.ActivitySubBinding

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_sub)
        //바인딩 초기화
        mBinding = ActivitySubBinding.inflate(layoutInflater)

        // 생성된 뷰 액티비티에 표시시
        setContentView(binding.root)

        //intent에 넘겨진 객체중에 msg가 있다면
        if(intent.hasExtra("msg")) {
            //서브 액티비티의 존재하는 텍스트뷰에 main에 있는 메세지가 넘겨져 옴
            binding.tvGetMsg.text = intent.getStringExtra("msg")
        }
    }
}

 

 

 

 

 

 

 

 


 

 

 

위의 글은 '홍로이드' 님의 유튜브 강좌를 보고 공부한 뒤,

다시 코드를 작성해본 뒤 뷰바인딩으로 변환시킨 코드입니다.

 

 

 

728x90

댓글