gpt4 book ai didi

android - 基类中的 ViewModelProviders.get(...)

转载 作者:IT老高 更新时间:2023-10-28 13:47:27 28 4
gpt4 key购买 nike

我试图通过将我的一些 ViewModel 实例移动到一个抽象基类中来减少 Dagger 的一些样板,但找不到一个很好的方法来做到这一点。我的 Intent 是从我的基本 fragment 中实例化我的所有 ViewModel,以便它们准备好被所有子 fragment 使用,而无需让它们自己进行实例化。我的问题在于使用通用(VM)检索 ViewModel - 特别是在这里: .get(viewModel::class.java) 。我还尝试了不允许的 .get(VM::class.java)

BaseFragment

abstract class BaseFragment<VM : ViewModel> : Fragment() {

@Inject lateinit var viewModelFactory: ViewModelProvider.Factory
lateinit var viewModel : VM

override fun onAttach(context: Context?) {
super.onAttach(context)
viewModel = ViewModelProviders.of(this, viewModelFactory).get(viewModel::class.java)
}
}

ViewModelProviders.get(...) 方法签名

public <T extends ViewModel> T get(@NonNull Class<T> modelClass)

这可能吗?

最佳答案

val viewModel: T by lazy {
ViewModelProviders.of(this).get(getTClass())
}

//获取泛型T的实际类型
private fun getTClass(): Class<T> {
return (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class<T>
}

关于android - 基类中的 ViewModelProviders.get(...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48892551/

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