[Android] startActivityForResult
Activity로부터 결과 가져오기 - startActivityForResult
startActivityForResult는 이동된 Activity로부터 값을 가져올때 쓸 수 있습니다.
A Activity에서 B Activity를 호출하게 되었을 때, B Activity에서 A Activity로 데이터를 전달할 수 있습니다.
일반적으로 startActivity(intent) 메소드를 통해 Intent 데이터를 담아 다음 Activity로 이동과 데이터를 전달합니다.
startActivityForResult는 A에서 이동한 B Activity가 종료되면서 다시 A로 데이터를 보내는 방식입니다.
startActivityForResult(Intent, requestCode) 로 다음 Activity를 호출하고
onActivityResult() 라는 override 메소드에서 결과를 받습니다.
간단한 글쓰기를 예시로 만들어봤습니다.
MainAcitivity.kt
btn_write.setOnClickListener {
val intent = Intent(this, WriteActivity:: class.java)
startActivityForResult(intent, 100);
}
다음과 같이 버튼을 클릭했을 때 intent와 requestCode인 100을 넣어 WriteActivity로 이동하게 만들었습니다.
MainActivity.kt
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (resultCode == Activity.RESULT_OK) {
when (requestCode) {
100 -> {
tv_title.visibility = View.VISIBLE
tv_contents.visibility = View.VISIBLE
tv_title.text = data!!.getStringExtra("title").toString()
tv_contents.text = data!!.getStringExtra("contents").toString()
}
}
}
}
이렇게 resultCode로 RESULT_OK를 받게되면 그에따른 requestCode 값에 맞게 동작합니다.
WriteActivity.kt
btn_save.setOnClickListener {
val intent = Intent()
intent.putExtra("title", et_title.text.toString())
intent.putExtra("contents", et_contents.text.toString())
setResult(Activity.RESULT_OK, intent)
finish()
}
WriteActivity에서는 2개의 EditText를 사용하여 Title과 Contents 값을 받아서 값을 넣어주고
setResult()를 호출하여 RESULT_OK와 값이 담긴 intent를 넣어주었습니다.
finish() 호출로 Activity가 종료되면서 다시 MainActivity로 돌아오게되고
이때 MainActivity의 onActivityResult가 동작하게 됩니다.