Ошибка «Не подтип» при создании экземпляра подкласса AndroidViewModel - PullRequest
0 голосов
/ 27 марта 2019

Как опытный разработчик iOS, делающий мое первое приложение для Android, я пытаюсь использовать AndroidViewModel, чтобы разрешить постоянство кросс-фрагмента / кросс-конфигурации в моем состоянии выполнения. Я использую AndroidViewModel вместо ViewModel, потому что мне нужен доступ к контексту приложения, чтобы загрузить некоторые статические ресурсы.

Это мой подкласс AndroidViewModel:

class QuestsViewModel(application: Application) : AndroidViewModel(application) {
  // Some member state variables
}

И я пытаюсь получить к нему доступ из моего основного задания onCreate, например:

val viewModel = ViewModelProviders.of(this,
  ViewModelProvider.AndroidViewModelFactory(this.application))
    .get(QuestsViewModel::class.java)

Но я получаю ошибку компилятора:

Введите параметр параметра T для оператора fun get (p0: Class): T не удовлетворен: предполагаемый тип QhestViewModel! не является подтипом ViewModel!

Я не понимаю, почему он считает, что мой пользовательский класс ViewModel не является подклассом, когда ApplicationViewModel (от которого я наследуюсь) напрямую наследуется от ViewModel?

Для ясности я пытаюсь написать этот проект полностью на Kotlin (если это возможно). На всякий случай, мои зависимости gradle:

    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.google.android.gms:play-services-maps:16.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.support:support-v4:28.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'

    implementation 'com.android.support:recyclerview-v7:28.0.0'
    implementation 'com.android.volley:volley:1.1.1'

    def lifecycle_version = "2.0.0"
    implementation "android.arch.lifecycle:extensions:1.1.1"
    implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
    kapt "androidx.lifecycle:lifecycle-compiler:$lifecycle_version"

1 Ответ

0 голосов
/ 29 марта 2019

Для справки в будущем для любого, кто найдет это: Моя проблема заключалась в импорте класса AndroidViewModel из двух разных пакетов в двух исходных файлах - один из пространства имен androidx, а другой - нет.

Перенос всех моих gradleпакеты к версиям Android (где это возможно) и обновление всех операторов import решили проблему.

...