gpt4 book ai didi

android - 使用 Koin 和 navArgs 在 childfragment 中获取 sharedviewmodel

转载 作者:行者123 更新时间:2023-12-04 23:46:47 28 4
gpt4 key购买 nike

我有一个基本上只包含底部导航和 View 模型的 fragment 。此 View 模型由该 fragment 中的所有子 fragment 共享。我的 parentfragment 看起来有点像这样:

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
}

View 模型在 koin 中注册,如下所示:
val viewModelModule = module {
/* other viewmodels */
viewModel { (user: UserModel) -> UserDetailViewModel(get(), get(), user) }
}


然后我们有我试图这样定义的子 fragment :
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)

如何在不再次定义 userModel 的情况下获得此 View 模型?

最佳答案

如果你有一个带有容器和底部导航的 fragment ,你可以试试这个技巧:

在您的父 fragment 中,您绑定(bind) ViewModel:

private val viewModel: UserDetailViewModel by viewModel()

在包含在父 fragment 容器中的子 fragment 之后:
private val viewModel by lazy { requireParentFragment().getViewModel<UserDetailViewModel>() }

此 ViewModel 将使用您的父 fragment 的 viewModelStore,因此所有子 fragment 的状态 View 模型都相同

Koin 版本 2.1.0

关于android - 使用 Koin 和 navArgs 在 childfragment 中获取 sharedviewmodel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59094242/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com