webentwicklung-frage-antwort-db.com.de

ViewModel in Kotlin: Unaufgelöste Referenz

Ich versuche, ViewModel in einer 100% Kotlin-App zu implementieren. In jeder Dokumentation, die ich finden kann, möchte ich Folgendes verwenden, um die ViewModel-Instanz zu erhalten:

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

Laut den Dokumenten sollte ich dies importieren können mit:

import Android.Arch.lifecycle.ViewModelProviders

Dieser Import ist jedoch nicht gelöst. Ich verwende Folgendes in meiner Builddatei:

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"

Warum kann ich nicht auf ViewModelProviders zugreifen?

8
RedBassett

Fügen Sie Folgendes als Abhängigkeit hinzu:

implementation "Android.Arch.lifecycle:extensions:1.1.1"

Diese Abhängigkeit gilt sowohl für ViewModel als auch für LiveData und erfordert daher nicht, separate Abhängigkeiten für dasselbe anzugeben. die ersten beiden von Ihnen angegebenen Abhängigkeiten können durch die zuvor erwähnte Abhängigkeit von Lebenszykluserweiterungen ersetzt werden. 

15
Supriya

Zusätzlich zu dem von Sup vorgeschlagenen Code müssen Sie lifecycler:compiler mit lifecycle:compiler korrigieren - die Gradle-Synchronisierung sollte mit diesem Tippfehler nicht einmal erfolgreich abgeschlossen werden.

Zweitens funktioniert die Standard-Annotationsverarbeitung von Android ("AnnotationProcessor") mit Kotlin nicht wirklich. Verwenden Sie stattdessen Kotlins kapt.

Fügen Sie oben in Ihrer build.gradle-Datei Folgendes hinzu:

apply plugin: 'kotlin-kapt'.

Und ersetzen Sie in Ihrem Abhängigkeitsbereich die Vorkommen von annotationProcessor (wie oben) durch kapt, z.

kapt "Android.Arch.lifecycle:compiler:1.1.1"

2
Julian Os

Dies kann auch behoben werden, indem minSdkVersion auf 21 eingestellt wird.

Wenn Sie minSdkVersion 21 Oder höher haben, brauchen Sie implementation "Android.Arch.lifecycle:extensions:1.1.1" Nicht.

0
user1032613

Ich bin in AndroidStudio 3.0.1 mit diesem Problem konfrontiert und habe es gelöst, indem ich folgende Abhängigkeiten im richtigen build.gradle hinzugefügt habe:

implementation "Android.Arch.lifecycle:extensions:1.1.1"
annotationProcessor "Android.Arch.lifecycle:compiler:1.1.1"

der Versionscode kann unterschiedlich sein, da AndroidStudio Ihnen mitteilt, ob er sich unterscheidet.

0
IP Kaal