Kotlin中的ViewModel:未解决的参考

Red*_*ett 19 android viewmodel gradle kotlin android-architecture-components

我试图在100%Kotlin应用程序中实现ViewModel.我能找到的每一篇文档都说我想用它来获取ViewModel实例:

ViewModelProviders.of(this).get(CustomViewModel::class.java)
Run Code Online (Sandbox Code Playgroud)

根据文档,我应该能够导入:

import android.arch.lifecycle.ViewModelProviders
Run Code Online (Sandbox Code Playgroud)

但是这个导入尚未解决.我在我的构建文件中使用以下内容:

def androidArchVersion = '1.1.1'
implementation "android.arch.lifecycle:viewmodel:$androidArchVersion"
implementation "android.arch.lifecycle:livedata:$androidArchVersion"
annotationProcessor "android.arch.lifecycler:compiler:$androidArchVersion"
testImplementation "android.arch.core:core-testing:$androidArchVersion"
Run Code Online (Sandbox Code Playgroud)

为什么我不能访问ViewModelProviders

Sup*_*iya 27

包括以下作为依赖项:

implementation "android.arch.lifecycle:extensions:1.1.1"
Run Code Online (Sandbox Code Playgroud)

这种依赖性适用于ViewModel和LiveData,因此不需要您为相同的依赖项提供单独的依赖项; 即,您指示的前两个依赖项可以由上述生命周期扩展依赖项替换.

  • 等效的AndroidX依赖项是““ androidx.lifecycle:lifecycle-extensions:2.0.0”`。 (7认同)

Lou*_*uis 10

就我而言,我失踪了:

implementation "androidx.fragment:fragment-ktx:1.1.0"
Run Code Online (Sandbox Code Playgroud)


Pra*_*iya 6

ViewModelProviders在 1.1.0 中已弃用

检查这个android文档 https://developer.android.com/topic/libraries/architecture/viewmodel

我正在使用 2.3.1 并在build.gradle中添加以下依赖项

implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.3.1'
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
Run Code Online (Sandbox Code Playgroud)

在Kotlin代码中声明 ViewModel,如下所示:

private val cartViewModel: CartViewModel by viewModels()
Run Code Online (Sandbox Code Playgroud)

不过,如果您遇到以下错误,例如

Unresolved reference: viewModels

然后需要在build.gradle中添加以下依赖项

implementation 'androidx.lifecycle:lifecycle-extensions-ktx:2.2.0'
implementation 'androidx.activity:activity-ktx:1.4.0'
implementation 'androidx.fragment:fragment-ktx:1.3.6'
Run Code Online (Sandbox Code Playgroud)

OR

implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
Run Code Online (Sandbox Code Playgroud)