본문 바로가기
안드로이드/Activity

안드로이드 OnActivityResult

by 김어찐 2022. 6. 9.
728x90

startActivityForResult

Activity에서 다른 Activity를 실행하고 다시 돌아왔을 때 어떤 처리가 필요하다면 Activity를 실행할 때 startActivity가 아닌 startActivityForResult 메서드를 사용한다.

 

onActivityResult

startActivityForResult 메서드를 이용해 Activity를 실행하고 돌아오면 자동으로 onActivityResult 메서드가 호출된다.
여기에서 필요한 작업을 처리한다.

 

메인 액티비티

package com.example.onactivityresult

import android.app.Activity
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 second_intent = Intent(this,SecondActivity::class.java)
//            startActivity(second_intent)
            startActivityForResult(second_intent,SECOND_ACTIVITY)

        }

        button4.setOnClickListener {
            val third_intent = Intent(this,ThirdActivity::class.java)
            startActivityForResult(third_intent,THIRD_ACTIVITY)

        }

    }
    // activity code 가 reqeustCode에 저장
    // resultCode 다른 activity에서 설정
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        when (requestCode) {
            SECOND_ACTIVITY -> {
                textView.text = "SecondActivity에서 돌아왔습니다"
            }

            THIRD_ACTIVITY -> {
                textView.text = "ThirdActivity에서 돌아왔습니다\n"
                when (resultCode) {
                    Activity.RESULT_OK ->{
                        textView.append("결과 : OK")
                    }
                    // back 버튼은 cancel
                    Activity.RESULT_CANCELED ->{
                        textView.append("결과 : CANCELED")
                    }
                    Activity.RESULT_FIRST_USER ->{
                        textView.append("결과 : USER 1")
                    }
                    Activity.RESULT_FIRST_USER + 1 ->{
                        textView.append("결과 : USER 2")
                    }
                }
            }
        }
    }
}

 

third 액티비티

package com.example.onactivityresult

import android.app.Activity
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(Activity.RESULT_OK)
            finish()
        }

        button5.setOnClickListener {
            setResult(Activity.RESULT_CANCELED)
            finish()
        }
        button6.setOnClickListener {
            setResult(Activity.RESULT_FIRST_USER)
            finish()
        }
        button7.setOnClickListener {
            setResult(Activity.RESULT_FIRST_USER + 1)
            finish()
        }
    }
}

728x90