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