한 화면에 모든걸 다 표시하는 정도의 간단한 앱이 아니라면 다른 액티비티로 이동은 필연적인 요소입니다.
간단하게 다른 액티비티로 이동하는 방법을 알아봅시다.
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로 액티비티 간 데이터 전달에 대해 포스팅 하겠습니다!
댓글