【发布时间】:2019-11-19 16:52:48
【问题描述】:
我正在使用 Koin 将 viewModel 注入片段。我的应用程序是单一活动。我只需要在 servisFragment 和 partFragment 中使用 sharedViewModel。 我想在标记为红色的导航后从 Activity 中清除该 viewModel。
我该怎么做?
viewModel注入代码
private val servisViewModel by sharedViewModel<ServisViewModel>()
Koin sharedViewModel
inline fun <reified T : ViewModel> Fragment.sharedViewModel(
name: String? = null,
noinline from: ViewModelStoreOwnerDefinition = { activity as
ViewModelStoreOwner },
noinline parameters: ParametersDefinition? = null
) = lazy { getSharedViewModel<T>(name, from, parameters) }
感谢您的帮助。
【问题讨论】:
-
在传统的嵌套Fragment中,我们可以使用
by sharedViewModel(from = { parentFragment as ViewModelStoreOwner})将ViewModel生命周期绑定到父Fragment生命周期。但是在导航组件中,我不知道如何获取父片段实例。 -
我设法绑定了 Koin 和上面的代码,但我不知道如何清除/取消绑定它以及是否需要这样做。
-
你不需要清除,就像
by viewModel()可以在fragment销毁时自动清除。 -
为 sharedViewModel 添加了代码。当片段被销毁时它是否会被清除,即使它像上面的代码一样使用 ViewModelStoreOwner 作为活动?
-
你使用导航组件吗?如果为真,则无法通过调用
getParentFragment()获取父片段。它总是返回NavHostFragment而不是你的servisFragment。
标签: android kotlin android-jetpack android-viewmodel koin