私はアクティビティとそのすべてのフラグメントに対して単一の viewModel を使用しています。
初期化するには、すべてのフラグメントviewmodel
にこのセットアップコードを記述する必要がありますonActivityCreated
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel = ViewModelProviders.of(activity!!).get(NoteViewModel::class.java)
}
Android KTX 拡張機能ページを徹底的に調べていました:(こちらを参照)
そして、次のようにビューモデルを初期化できることがわかりました。
// Get a reference to the ViewModel scoped to this Fragment
val viewModel by viewModels<MyViewModel>()
// Get a reference to the ViewModel scoped to its Activity
val viewModel by activityViewModels<MyViewModel>()
そこで、以下の依存関係をGradle(アプリ)に追加しました。
//ktx android
implementation 'androidx.core:core-ktx:1.0.2'
implementation 'androidx.fragment:fragment-ktx:1.0.0'
implementation "androidx.lifecycle:lifecycle-extensions:2.0.0"
viewModels/activityViewModels
しかし、アプリケーションで使用しようとすると、参照が見つかりません。
これらの拡張機能の使用方法について、基本的な例をいくつか挙げて教えてほしいのですが、例を検索してみましたが見つかりません。
ベストアンサー1
ついに安定したバージョンが手に入りました。
移転後、implementation 'androidx.fragment:fragment-ktx:1.1.0'
別の問題に直面しました。
コンパイラ エラー:
JVM ターゲット 1.8 でビルドされたバイトコードを、JVM ターゲット 1.6 でビルドされているバイトコードにインライン化することはできません。
build.gradle
(モジュール:app
)
compileOptions {
sourceCompatibility = 1.8
targetCompatibility = 1.8
}
kotlinOptions {
jvmTarget = "1.8"
}
上記のすべてを適用すると、問題は解決されます。