使用KOIN和NAVARGS获取子片段中的共享视图模型 [英] Get sharedviewmodel in childfragment using Koin and navArgs

查看:0
本文介绍了使用KOIN和NAVARGS获取子片段中的共享视图模型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个片段,它基本上只包含一个底部导航和一个视图模型。此视图模型由此片段中的所有子片段共享。我的父片段看起来有点像这样:

class UserDetailFragment : Fragment() {

    private val args: UserDetailFragmentArgs by navArgs()
    private val userDetailViewModel: UserDetailViewModel by viewModel { parametersOf(args.user) }

    //standard code
    //onCreateActivity where I do some basic stuff like switching the fragments
}

视图模型在KOIN中注册如下:

val viewModelModule = module {
        /* other viewmodels */
        viewModel { (user: UserModel) -> UserDetailViewModel(get(), get(), user) }
    }

然后我们就有了我尝试这样定义的子片段:

class UserAlbumsFragment : Fragment() {

    private val userDetailViewModel: UserDetailViewModel by sharedViewModel() //THIS LINE ISN'T WORKING

    //standard code again
}

如您所见,有一行不起作用,我尝试将其写为:

private val userDetailViewModel: UserDetailViewModel 
   by sharedViewModel(from = { parentFragment as ViewModelStoreOwner })

但我一直收到此错误:

Caused by: org.koin.core.error.NoParameterFoundException: Can't get parameter value #0 from org.koin.core.parameter.DefinitionParameters@426de94
        at org.koin.core.parameter.DefinitionParameters.elementAt(DefinitionParameters.kt:31)
        at org.koin.core.parameter.DefinitionParameters.component1(DefinitionParameters.kt:33)
        at com.kvw.technicaltestmediamonks.di.KoinModules$viewModelModule$1$5.invoke(Unknown Source:11)
        at com.kvw.technicaltestmediamonks.di.KoinModules$viewModelModule$1$5.invoke(KoinModules.kt:37)
        at org.koin.core.instance.DefinitionInstance.create(DefinitionInstance.kt:54)

如何在不重新定义用户模型的情况下获取此视图模型?

推荐答案

如果您有一个带有容器和底部导航的片段,您可以尝试此技巧:

在父片段中绑定了ViewModel:

private val viewModel: UserDetailViewModel by viewModel()

在父片段的容器中包含的子片段中:

private val viewModel by lazy { requireParentFragment().getViewModel<UserDetailViewModel>() }

此ViewModel将使用父片段的viewModelStore,因此它将是所有子片段的相同状态viewModel

KOIN版本2.1.0

这篇关于使用KOIN和NAVARGS获取子片段中的共享视图模型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆