11

我正在使用 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) }

感谢您的任何帮助。

4

2 回答 2

4

如果您需要清除所有viewModels内容,Fragment请尝试在您的Fragment

viewModelStore.clear()

如果你需要清除混凝土ViewModel 试试这个

getViewModelStore(ViewModelParameters(...)).clear()
于 2019-08-05T16:59:10.007 回答
0

如果您使用 koin 进行注入,onDestoy则应在片段中使用

requireActivity().viewModelStore.clear()

因为直接来自片段的 viewModelStore 将返回 none 以清除

但是这样做的问题是它会清除此 ViewModelStore 范围内的所有视图模型。因此,您将无法控制要清除的 ViewModel。

于 2021-08-24T14:41:09.640 回答