이것저것 다 개발

[Android] startActivityForResult 본문

Android

[Android] startActivityForResult

용용개발 2019. 1. 10. 23:44

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가 동작하게 됩니다. 


Comments