Android
액티비티간, fragment간 값 전달 하기 (ViewModel X)
그란.
2022. 2. 12. 18:36
ViewModel 로 값 전달하면 서로 결속력이 너무 강해진다
리스너로 연결하는 방법도 있지만 그것보다 좀더 편한 방법이 있다.
(리스너도 리스너객체를 전달하고 구현해야하기 하기때문에 불편)
(Fragment or Activity) <-> (Activity)
private val productWishResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
if (result.resultCode == Activity.RESULT_OK) {
viewModel.input.onRefresh()
}
}
productWishResult.launch(ProductDetailActivity.getIntent(requireContext()).apply {
putExtras(
bundleOf(
ProductDetailActivity.EXTRA_PRODUCT_ID to it
)
)
})
HomeFragment 에서
ProductDetatilActivity 로 이동한 후에
setResult(RESULT_OK)
를 받은 후 HomeFragment 로 돌아왔을때 onRefresh()를 호출하는 구조
Fragment <-> ChildFragment 간 통신
ChildFragment
setFragmentResult(
FavoriteProductFragment.name, bundleOf(
RESULT_OK to it
)
)
ParentFragment
childFragmentManager.setFragmentResultListener(
FavoriteProductFragment.name, this
) { _, bundle ->
val isUpdated = bundle.getBoolean(FavoriteProductFragment.RESULT_OK)
if (isUpdated) {
viewModel.input.onRefresh()
}
}