Activity, Fragment 간 데이터 전달

Hyeon·2023년 5월 2일
0

Android

목록 보기
14/15

Activity <-> Activity

데이터 보내기

// 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")

Activity -> Fragment

데이터 보내기

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")

Fragment -> Activity

데이터 보내기

// 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
}

Activity 종료 시 result 전달

Activity 호출

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
	}
}

Activity 종료 시 result 전달

// 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()
profile
컴공학부생입니다.

0개의 댓글