본문 바로가기
Kotlin

[Kotlin/코틀린] Android Intent 사용법1 / 다른 액티비티로 이동하기

by IGBR 2022. 2. 28.

한 화면에 모든걸 다 표시하는 정도의 간단한 앱이 아니라면 다른 액티비티로 이동은 필연적인 요소입니다.

간단하게 다른 액티비티로 이동하는 방법을 알아봅시다.


1. 기본 사용법

val 인텐트이름 : Intent = Intent(this@출발할 액티비티 , 목적지 액티비티 :: class.java)
startActivity(인텐트이름)

 

- 예시 코드 ) MainActivity 에서 SecondActivity로 이동 (this로만 적어도 작동 됩니다.)

val myIntent : Intent = Intent(this, SecondActivity :: class.java)
startActivity(myIntent)

2. 사용해보기

- 버튼을 클릭하여 MainActivity 와 SecondActivity 간 이동하는 간단한 코드

 

- MainActivity.kt

package com.example.kotlinintentindependentstudy

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)

        btnMoveToSecond.setOnClickListener {

            val myIntent : Intent = Intent(this, SecondActivity :: class.java)
            startActivity(myIntent)

        }
    }
}

 

- SecondActivity.kt

package com.example.kotlinintentindependentstudy

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_second.*

class SecondActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_second)

        btnMoveToFirst.setOnClickListener {

//            이런식으로 이전화면으로 돌아갈 때에도 Intet를 한다면

//            val mySecondIntent : Intent = Intent(this, MainActivity :: class.java)
//            startActivity(mySecondIntent)

//            화면이 A -> B -> A  |  B가 종료되면 A -> A | 즉 A를 종료하더라도 A가 남아있는 현상이 발생

            finish()
        }
    }
}

3. 주의 사항 - 액티비티 스택관리

- 액티비티는 기본적으로 stack 형식의 자료구조입니다.

- LIFO(Last In First Out) 구조를 가지고 있고 가장 나중에 들어온 것 부터 빠져나갑니다.

- Intent로 액티비티간 이동을 하다가 앱을 종료를 하려고 보면 지금 까지 이동했던 액티비티를 역순으로 빠져나오게 됩니다.

- 따라서 Intent를 사용 할 땐 스택을 염두에 두면서 프로그래밍 해야합니다.

 

3.1 finish( ) 없이 사용 할경우 액티비티 스택의 모습

 

- 1. MainActivity에서 SecondActivity로 이동 

- 2. ScondActivity에서 MainActivity로 이동 

- 3. 다시 MainActivity에서 SecondActivity로 이동 

- 4. 앱을 종료하고 싶어서 액티비티를 종료 하면 Second-> Main -> Second -> Main -> 종료


3.2 finish( )를 사용 했으나 SecondActivity에서 MainActivity로의 복귀를 Intent로 했을 때

 

- ※ 이런 형태는 혹시 SecondActivity에서 데이터를 가지고 MainActivity로 갈때 이러지 않을까? 싶겠지만 다른 방법이 있습니다. (추후 포스팅 예정)

 

- 1. MainActivity에서 SecondActivity로 이동 

- 2. SecondActivity에서 MainActivity로 Intent와 동시에 finish( )로 SecondActivity 종료

- 3. MainActivity가 두개 쌓여있는 형태가 되어 앱을 종료할 때 MainActivity를 두번 종료해야함


3.3 finish( )를 통해 SecondActivity에서 MainActivity로 복귀하는 방법 (추천 방법)

 

- 1. MainActivity에서 SecondActivity로 이동 

- 2. SecondActivity에서 MainActivity로 복귀할 때 Intent를 사용하지 않고 finish( )를 사용하여 SecondActivity 종료 

 


세줄 요약

1. 액티비티 간 이동은 val 인텐트이름 : Intent = Intent( this@출발할 액티비티 , 도착할 액티비티 :: class.java)

2. startActivity(인텐트 이름)

3. SecondActivity에서 MainActivity로 복귀할 땐 Intent없이 finish( )로 복귀한다.  

 

위에서 사용한 예제

https://github.com/no1msh/KotlinIntentIndependentStudy

 

다음엔 Intent로 액티비티 간 데이터 전달에 대해 포스팅 하겠습니다!

댓글