Which approach is correct:
Passing Fragment
instance as lifecycleOwner
:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
val binding = FragmentEventSettingsBinding.inflate(inflater, container, false)
binding.lifecycleOwner = this
return binding.root
}
Passing viewLifecycleOwner
of the Fragment
:
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
val binding = FragmentEventSettingsBinding.inflate(inflater, container, false)
binding.lifecycleOwner = viewLifecycleOwner
return binding.root
}
The recommended solution is to use fragment’s view lifecycle via getViewLifecycleOwner() or getViewLifecycleOwnerLiveData() which were added in Support Library 28.0.0 and AndroidX 1.0.0, so that LiveData will remove observers every time the fragment’s view is destroyed
Reference: 5 common mistakes when using Architecture Components