Kotlin 中的 ViewModel:未解决的参考

ViewModel in Kotlin: Unresolved Reference

我正在尝试在 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

包括以下作为依赖项:

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

等效的 AndroidX 依赖项是:

"androidx.lifecycle:lifecycle-extensions:VERSION"

在给定 in this official link

的情况下,可以将 VERSION 替换为当前稳定版、Beta 版或 Alpha 版值

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

除了 的建议之外,您还必须将 lifecycler:compiler 更正为 lifecycle:compiler - Gradle 同步甚至不应该因为这个拼写错误而成功完成.

其次,标准 android 注释处理 ("annotationProcessor") 并不真正适用于 Kotlin。相反,请使用 Kotlin 的 kapt。

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

apply plugin: 'kotlin-kapt'.

并且在您的依赖项部分,将出现的 annotationProcessor(如上面的)替换为 kapt,例如

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

我在AndroidStudio 3.0.1遇到过这种问题,通过添加解决 遵循正确的 build.gradle:

中的依赖项
implementation "android.arch.lifecycle:extensions:1.1.1"
annotationProcessor "android.arch.lifecycle:compiler:1.1.1"

AndroidStudio 告诉您的版本代码可能会有所不同。

这也可以通过将 minSdkVersion 设置为 21 来解决。

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

如果上述 "adding/updating dependecies" 没有解决您的问题,请尝试 重新启动 您的 android 工作室。它只是根,我没有看到任何重大问题。希望对你有帮助。

就我而言,我失踪了:

implementation "androidx.fragment:fragment-ktx:1.1.0"
android {
    kotlinOptions {
        jvmTarget = '1.8'
    } 
}

项目和应用级别

我是这样解决的。 实现这个依赖

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

然后调用我的 ViewModel class

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

如果有人想要 androidx,那么,首先 - 在 build.gradle (app):

implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"

第二 - 在代码文件中:

import androidx.lifecycle.ViewModelProvider

第三个 - 使用它:

ViewModelProvider(this).get(CustomViewModel::class.java)

或者像这样使用它(如果需要 ViewModelFactory):

ViewModelProvider(this, CustomViewModelFactory).get(CustomViewModel::class.java)

为我解决了这个依赖关系

 implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"

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'

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

private val cartViewModel: CartViewModel by viewModels()

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

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'

OR

implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'

不太确定为什么这个问题有这么多解决方案,但是虽然 none 这些对我有用,但我确实找到了适合我的解决方案。

implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.4.1"