gpt4 book ai didi

android - 使用 navGraphViewModels() [with Hilt] 初始化接口(interface) ViewModel 时出现 ClassCastException

转载 作者:行者123 更新时间:2023-12-04 23:58:50 29 4
gpt4 key购买 nike

我有一个使用导航图限定范围的 fragment 流,并希望相应地限定每个 fragment 的 ViewModel。但是,我不希望每个 Fragment 都可以访问 ViewModel 中的所有方法和变量,因此每个 Fragment 的 ViewModel 都是在基础 ViewModel 中实现的接口(interface)。

我在每个 fragment 中使用 by navGraphViewModels() 委托(delegate),但它似乎无法将接口(interface)转换为基类。

跟踪错误是:

java.lang.ClassCastException: java.lang.Object 无法转换为androidx.lifecycle.ViewModel

关于如何解决这个问题有什么建议吗??

在我的Fragment中定义如下:

@AndroidEntryPoint
class ExampleFragment : Fragment() {

private val viewModel: ExampleViewModelController by
navGraphViewModels(R.id.nav_graph_example){defaultViewModelProviderFactory}
///

ViewModel 定义为:

@HiltViewModel
class ExampleViewModel @Inject constructor(
private val handle: SavedStateHandle,
private val useCases: ExampleUseCases,
) : ViewModel(), ExampleViewModelController {

override fun validateExampleInputs() {
// TODO("Not yet implemented")
}
}

最后,界面:

interface ExampleViewModelController {
fun validateExampleInputs()
}

最佳答案

ClassCastException 的发生是因为没有像 by navGraphViewModels<ExampleViewModel>() 这样的类型参数传递给委托(delegate).因此,委托(delegate)错误地尝试创建接口(interface)的新实例 ExampleViewModelController而不是 ExampleViewModel .

关于android - 使用 navGraphViewModels() [with Hilt] 初始化接口(interface) ViewModel 时出现 ClassCastException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70123706/

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