Kotlin中的ViewModel:未解决的参考

时间:2018-04-20 05:34:08

标签: android gradle kotlin viewmodel android-architecture-components

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

ViewModelProviders.of(this).get(CustomViewModel::class.java)

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

import android.arch.lifecycle.ViewModelProviders

此导入尚未解决。我在构建文件中使用以下内容:

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"

为什么我无法访问ViewModelProviders

8 个答案:

答案 0 :(得分:20)

包含以下内容作为依赖项:

implementation "android.arch.lifecycle:extensions:1.1.1"

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

答案 1 :(得分:6)

就我而言,我不见了:

implementation "androidx.fragment:fragment-ktx:1.1.0"

答案 2 :(得分:2)

除了Sup建议的内容之外,您还必须将lifecycler:compiler更改为lifecycle:compiler - Gradle同步甚至不应该成功完成此错误。< / p>

其次,标准的android注释处理(&#34; annotationProcessor&#34;)并不能真正与Kotlin一起使用。相反,使用Kotlin的kapt。

在build.gradle文件的顶部,添加以下内容:

apply plugin: 'kotlin-kapt'

在您的依赖项部分中,将annotationProcessor(如上所述)的出现替换为kapt,例如

kapt "android.arch.lifecycle:compiler:1.1.1"

答案 3 :(得分:1)

我在AndroidStudio 3.0.1中遇到了此类问题,并通过添加解决了 在正确的build.gradle中具有以下依赖性:

table2

版本代码可能会有所不同,因为AndroidStudio会告诉您是否不同。

答案 4 :(得分:0)

这也可以通过将minSdkVersion定位为21来解决。

如果您的minSdkVersion 21或更高,则不需要implementation "android.arch.lifecycle:extensions:1.1.1"

答案 5 :(得分:0)

如果上述“添加/更新依赖项”未能解决您的问题,请尝试重新启动您的Android Studio。它只是为了扎根,我认为它没有任何重大问题。希望对您有所帮助。

答案 6 :(得分:0)

android {
    kotlinOptions {
        jvmTarget = '1.8'
    } 
}

项目e应用级别

答案 7 :(得分:0)

我通过这样做来解决这个问题。 实现这个依赖

implementation "android.arch.lifecycle:extensions:1.1.1"

然后调用我的 ViewModel 类

homeViewModel = ViewModelProvider(this).get(HomeViewModel::class.java)