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"
的情况下,可以将 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"
我正在尝试在 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"
的情况下,可以将 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"