android - 如何在BaseActivty类中具有通用ViewModel

标签 android kotlin android-viewmodel kotlin-reified-type-parameters

我想要一个基础 Activity 类,该类负责一些初始化工作,我开始像这样定义它。

abstract class BaseActivity<VIEW_MODEL : ViewModel, BINDING : ViewDataBinding> :
    AppCompatActivity() {
    lateinit var viewmodel: VIEW_MODEL
    lateinit var binding: BINDING

    lateinit var glide: RequestManager

    @get:LayoutRes
    abstract val layoutResource: Int


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = DataBindingUtil.setContentView(this, layoutResource)
        viewmodel = ViewModelProviders.of(this).get(VIEW_MODEL::class.java)
                                                    ^^^^^^^^^^^^^^^^^
                                                    this is causing error
    }
}

但是我收到这个错误

Cannot use 'VIEW_MODEL' as reified type parameter. Use a class instead



我应该如何解决此问题,在这里我想将ViewModel的类型定义为BaseActivity的类型化参数。

我该如何实例化它?

最佳答案

一种解决方案是拥有这样的东西

abstract val viewModelClass: Class<VIEW_MODEL>

我真的很想不要这样的东西

关于android - 如何在BaseActivty类中具有通用ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55289334/

相关文章:

安卓 : email sending without google signing in (Automatically sending mails)

android - 向 RecyclerView ListAdapter 提交新列表时,差异检查始终为 areContentsTheSame() 返回 true

kotlin - Realm :如何通过DynamicRealm判断字段是否可为空?

android - 单个 ViewModel 中的多个 LiveData 对象

android - 测试导航组件 : "does not have a NavController"

java - 显示 ProgressDialog 直到 AsyncTask 完成,然后更新 UI

c# - 发送广播包问题

android - 如何在 Jetpack Compose 中为 TextField 设置 inputType

android - Android资源编译失败-AAPT错误-资源重复值

Android SavedStateHandle 未保存在 ViewModel 中