startActivityResult
- Activity에서 다른 Activity를 실행하고 다시 돌아왔을 때 어떤 처리가 필요하다면 Activity를 실행할때 startActivity가 아닌 startActivityForResult 메서드를 사용한다.
- startActivityForResult 메서드를 이용해 Activity를 실행하고 돌아오면 자동으로 onActivityResult 메서드가 호출된다.
- 여기에서 필요한 작업을 처리한다.
onActivityResult가 왜 필요할까?
만약, MainActivity에서 실행하는 Activity가 SecondActivity만 있는 것이아닌, 다른 Activity도 있는 경우, MainActivity에서 SecondActivity로 갔다가 돌아 왔을때, 어떤 Activity를 실행을 하고 돌아왔는지를 구분해야될 경우가 있기 때문에
EmptyActivity를 2개 만든 상황
SecondActivity, ThirdActivity
requestCode를 사용해서 어떤 Activity를 갔다가 다시왔는지 구분할 수 있다.
package com.sypark.onactivityresult
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity() {
val SECOND_ACTIVITY = 100
val THIRD_ACTIVITY = 200
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button.setOnClickListener {
val secondIntent = Intent(this,SecondActivity::class.java)
startActivityForResult(secondIntent,SECOND_ACTIVITY)
}
button4.setOnClickListener {
val thirdIntent = Intent(this,ThirdActivity::class.java)
startActivityForResult(thirdIntent,THIRD_ACTIVITY)
}
}
//Intent만들때 적어주었던 SECOND_ACTIVTY, THIRD_ACTIViTY가 고대로 requestCode로 들어온다
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when(requestCode){
SECOND_ACTIVITY -> {
textView.text="2번째 액티비티에서 돌아왔다"
}
THIRD_ACTIVITY -> {
textView.text = "3번째 액티비티에서 돌아왔따"
}
}
}
}
ResultCode 사용하기
ThirdActivity
setResult를 이용해서 MainActivity의 ResultCode로 값을 넘겨준다.
package com.sypark.onactivityresult
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_third.*
class ThirdActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_third)
button3.setOnClickListener {
setResult(RESULT_OK) //값을 가지고 MainActivity로 가져간다
finish()
}
button5.setOnClickListener {
setResult(RESULT_CANCELED)
finish()
}
button6.setOnClickListener {
setResult(RESULT_FIRST_USER)
finish()
}
button7.setOnClickListener {
setResult(RESULT_FIRST_USER+1)
finish()
}
}
}
MainActivity
//Intent만들때 적어주었던 SECOND_ACTIVTY, THIRD_ACTIViTY가 고대로 requestCode로 들어온다
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when(requestCode){
SECOND_ACTIVITY -> {
textView.text="2번째 액티비티에서 돌아왔다"
}
THIRD_ACTIVITY -> {
textView.text = "3번째 액티비티에서 돌아왔따"
when(resultCode){
RESULT_OK -> {
textView.append("결과:ok")
}
RESULT_CANCELED -> {
textView.append("결과:canceled")
}
RESULT_FIRST_USER -> {
textView.append("결과:유저1")
}
RESULT_FIRST_USER+1 -> {
textView.append("결과:유저2")
}
}
}
}
}
OK 클릭
정리
- startActivityForResult 메서드를 통해 Activity를 실행하면 다시 돌아올 때 필요한 처리를 할 수 있다.
'2022년' 카테고리의 다른 글
객체 전달하기 (0) | 2021.10.20 |
---|---|
데이터 전달하기 (0) | 2021.10.20 |
Activity실행하기 (0) | 2021.10.20 |
Activity (0) | 2021.10.20 |
Popup Menu (0) | 2021.10.19 |