如果我通过这样的方式设置了片段和视图模型,并从片段中设置了一个动作变量,因此有隐式引用,则视图模型死后会自动清除该引用,并打破潜在的引用周期,或者我应该在viewModel.onCleared()
中手动清除它吗?
class MyFragment: BaseFragment() {
lateinit var viewModel: MyViewModel
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return FragmentMyBinding.inflate(inflater, container, false).also { binding ->
binding.viewModel = ViewModelProviders.of(this).get(MyViewModel::class.java).apply {
viewModel = this
showLoader = {
// code to display loading spinner
}
}
binding.lifecycleOwner = viewLifecycleOwner
}.root
}
}
...
class MyViewModel: ViewModel() {
lateinit var showLoader: () -> Unit
...
答案 0 :(得分:0)
您不应在ViewModel
中执行任何与UI相关的操作。您的ViewModel
应该通过Fragment/Activity
将数据提供给您的Observer
。我假设您想在加载数据之前显示一些指示器,然后再隐藏它。因此,在加载数据之前立即显示指标,然后将其隐藏在onChange
的{{1}}中:
Observer