// bundle 생성
var bundle = Bundle()
bundle.putString("msg", "i'm from MainActivity")
intent.putExtra("bundle", bundle)
// Activity 띄우기
startActivity(intent)
// bundle 받기
val bundleFromMainActivity = intent.extras?.getBundle("bundle")
// bundle 내의 데이터 조회
binding.subActivityFromMainActivityTv.text = bundleFromMainActivity?.getString("msg")
val subFragment = SubFragment()
// subfragment에 인자 전달하기
var bundle = Bundle()
bundle.putString("txt", "hello, i'm from sub activity")
subFragment.arguments = bundle
binding.subFragmentFromActivity.text = arguments?.getString("txt")
// subactivity로 데이터 보내기
parentFragmentManager.setFragmentResult("SubFragmentRequestKey",
bundleOf( "SubFragmentBundleKey" to "hello i'm from SubFragment"))
// subfragment로부터 오는 데이터 받도록 리스너 설정
supportFragmentManager
.setFragmentResultListener("SubFragmentRequestKey", this){
requestkey , bundle ->
val result = bundle.getString("SubFragmentBundleKey")
binding.subActivityFromSubFragmentTv.text = result
}
result를 받을 수 있도록 아래처럼 호출한다.
startForResult.launch(intent)
startForResult는 액티비티 클래스내에 아래와 같이 정의될 수 있다. (예시)
private val startForResult = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()) {
result: ActivityResult ->
if (result.resultCode == RESULT_OK) {
val res = result.data?.getBundleExtra("bundle")!!.getString("msg")!!
Log.d("res from sub activity ", res)
binding.mainFromSubActivityTv.text = res
}
}
// intent 생성
var intent = Intent(applicationContext, MainActivity::class.java)
// result로 전달할 bundle 데이터 생성
var bundle = Bundle()
bundle.putString("msg", "i'm from sub activity")
// intent에 bundle 넣기
intent.putExtra("bundle", bundle)
// result 설정
setResult(RESULT_OK, intent)
// Activity 종료
finish()