1. startActivityForResult
- Activity에서 다른 Activity를 실행하고 다시 돌아왔을 때 어떤 처리가 필요하다면 Activity를 실행할 때 startActivity가 아닌 startActivityForResult 메서드를 사용한다.
- 나는 그냥 다른 액티비티만 실행하면돼! -> startActivity
- 아니 나는 다른 액티비티 실행했다가 다시 돌아와서 뭔가 수행해야돼 -> startActivityForResult
2. onActivityResult
- startActivityForResult 메서드를 이용해 Activity를 실행하고 돌아오면 자동으로 onActivityResult 메서드가 호출된다. 여기에서 필요한 작업을 처리하면 된다.
- 매개변수
1. requestCode : Main Activity에서 갔다가 돌아온 Activity가 여러개 일 수 있기 때문에 그걸 구분해주기 위해 사용하는 코드. 어떤 액티비티에서 finish하고 돌아왔는지 구분해주기 위한 코드.
2. resultCode : 다른 activity로 들어가서 작업을 했고, 그 작업의 결과가 어떤지 알려주는 코드. 작업하는 액티비티에서 setResult()로 설정 가능.
// 4.
// startActivityForResult()로 SecondActivity를 실행시켰기 때문에 거기서 finish()하고 돌아왔을 때 자동으로 이 함수가 호출.
// requestCode : Main Activity에서 갔다가 돌아온 Activity가 여러개 일 수 있기 때문에 그걸 구분해주기 위해 사용하는 코드. 어떤 액티비티에서 finish하고 돌아왔는지 구분해주기 위한 코드.
// resultCode : 다른 activity로 들어가서 작업을 했고, 그 작업의 결과가 어떤지 알려주는 코드. 작업하는 액티비티에서 setResult()로 설정 가능.
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when(requestCode)
{
SECOND_ACTIVITY ->
{
textView.text = "세컨액티비티에서 돌아옴"
// 7. 전달받은 resultCode로 분기 가능.
when(resultCode)
{
Activity.RESULT_OK -> {
textView.text = "asdsad"
}
Activity.RESULT_CANCELED -> {
textView.text = "asdasd"
}
Activity.RESULT_FIRST_USER -> {
textView.text = "asda"
}
}
}
THIRD_ACTIVITY -> {
textView.text = "서드액티비티에서 돌아옴"
}
}
}
예제
main
class MainActivity : AppCompatActivity() {
// 6. 상수 정의
private val SECOND_ACTIVITY = 1
private val THIRD_ACTIVITY = 2
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 1. 버튼을 눌러서 두번째 액티비티를 실행시킨다.
button2.setOnClickListener { view ->
// 2. 인텐트 객체 생성
var intent = Intent(this, SecondActivity::class.java)
// 3. 이 Intent를 실행시켜줘! 안드로이드os야!
startActivityForResult(intent, SECOND_ACTIVITY)
}
button3.setOnClickListener { view ->
// 5. 서드액티비티로 이동하는 인텐트
var intent = Intent(this, ThirdActivity::class.java)
startActivityForResult(intent, THIRD_ACTIVITY)
}
}
// 4.
// startActivityForResult()로 SecondActivity를 실행시켰기 때문에 거기서 finish()하고 돌아왔을 때 자동으로 이 함수가 호출.
// requestCode : Main Activity에서 갔다가 돌아온 Activity가 여러개 일 수 있기 때문에 그걸 구분해주기 위해 사용하는 코드. 어떤 액티비티에서 finish하고 돌아왔는지 구분해주기 위한 코드.
// resultCode : 다른 activity로 들어가서 작업을 했고, 그 작업의 결과가 어떤지 알려주는 코드. 작업하는 액티비티에서 setResult()로 설정 가능.
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when(requestCode)
{
SECOND_ACTIVITY ->
{
textView.text = "세컨액티비티에서 돌아옴"
// 7. 전달받은 resultCode로 분기 가능.
when(resultCode)
{
Activity.RESULT_OK -> {
textView.text = "asdsad"
}
Activity.RESULT_CANCELED -> {
textView.text = "asdasd"
}
Activity.RESULT_FIRST_USER -> {
textView.text = "asda"
}
}
}
THIRD_ACTIVITY -> {
textView.text = "서드액티비티에서 돌아옴"
}
}
}
}
second
class SecondActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_second)
button7.setOnClickListener { view ->
// 7.
// setResult()를 통해 resultCode를 전달할 수 있다.
setResult(Activity.RESULT_OK)
finish()
}
button8.setOnClickListener { view ->
setResult(Activity.RESULT_CANCELED)
finish()
}
button9.setOnClickListener { view ->
setResult(Activity.RESULT_FIRST_USER)
finish()
}
}
}
Third
class ThirdActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_third)
button4.setOnClickListener { view ->
finish()
}
}
}
'Deperecated > Android_강의' 카테고리의 다른 글
안드로이드 - 객체 전달하기 (0) | 2020.02.18 |
---|---|
안드로이드 - 데이터 전달하기 (0) | 2020.02.18 |
안드로이드 - 안드로이드 4대 구성 요소 - Activity 실행하기 (0) | 2020.02.18 |
안드로이드 - RunOnUiThread (0) | 2020.02.18 |
안드로이드 - AsyncTask (0) | 2020.02.17 |