web-dev-qa-db-ja.com

KotlinのViewModel:未解決のリファレンス

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にアクセスできないのはなぜですか?

17
RedBassett

依存関係として次を含めます。

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

この依存関係は、ViewModelとLiveDataの両方に対するものであるため、同じものに対して個別の依存関係を指定する必要はありません。つまり、あなたが示した最初の2つの依存関係は、前述のライフサイクル拡張の依存関係に置き換えることができます。

25
Supriya

Sup の提案に加えて、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"

3
Julian Os

AndroidStudio 3.0.1でこの種の問題に直面し、適切なbuild.gradleに次の依存関係を追加することで解決しました。

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

androidStudioが異なる場合はバージョンコードが異なるため、バージョンコードは異なる場合があります。

1
Ishwor Khanal

これは、minSdkVersionを21にターゲットすることでも解決できます。

あなたが持っている場合 minSdkVersion 21以上、必要ありませんimplementation "Android.Arch.lifecycle:extensions:1.1.1"

0
user1032613