【问题标题】:'by viewModels()' Kotlin property delegate unresolved reference'by viewModels()' Kotlin 属性委托未解析的引用
【发布时间】:2020-07-04 21:35:04
【问题描述】:

我正在尝试使用 kotlin 实现视图模型。首先我添加了所需的依赖项:

implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core-ktx:1.2.0'
// ViewModel
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0"
// Annotation processor
kapt "androidx.lifecycle:lifecycle-compiler:2.2.0"

然后我创建了一个简单的视图模型:

class MyViewModel: ViewModel() {
    val greeting = "Hello World"
}

但是当我尝试使用 kotlin 属性委托从 Activity 访问视图模型时:

val model by viewModels<MyViewModel>()

编译器无法解析viewModels。我不知道问题是什么。我错过了什么吗?

【问题讨论】:

    标签: android kotlin viewmodel


    【解决方案1】:

    添加这些依赖项:

    implementation "androidx.activity:activity-ktx:$activity_version"
    implementation "androidx.fragment:fragment-ktx:$fragment_version"
    

    您可以在此处找到最新版本的库:

    https://developer.android.com/jetpack/androidx/releases/activity

    https://developer.android.com/jetpack/androidx/releases/fragment

    【讨论】:

    • fragment ktx 应该足够了 afaik
    【解决方案2】:

    对我来说,上面的解决方案不起作用。

    我需要导入:

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

    【讨论】:

      【解决方案3】:

      对我来说,上面的解决方案不起作用。

      添加这个依赖::

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

      添加这个依赖:

       implementation "androidx.lifecycle:lifecycleviewmodel:2.2.0"
      

      【讨论】:

        【解决方案4】:

        解决了这个错误,在模块级build.gradle

        中使用了下面的依赖
        implementation 'androidx.navigation:navigation-fragment-ktx:2.3.5'
        implementation 'androidx.navigation:navigation-ui-ktx:2.3.5'
        

        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'
        

        我还添加了以下依赖项以在 Kotlin

        中实现 ViewModel
        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'
        

        我的模块级build.gradle如下启动

        plugins {
            id 'com.android.application'
            id 'kotlin-android'
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-11-17
          • 1970-01-01
          • 2015-09-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-04-02
          • 2012-03-25
          相关资源
          最近更新 更多