web-dev-qa-db-ja.com

viewModelsでviewModelを取得する方法(フラグメント-ktx)

アクティビティとそのすべてのフラグメントの単一の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(app)に以下の依存関係を追加しました:

    //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を使用しようとすると、参照が見つかりません。

これらの拡張機能をいくつかの基本的な例で使用する方法についてヘルプが必要です。例を検索しようとしても、見つかりませんでした。

23
Anmol

Koinを使用してこれを機能させることができます:

private val viewModel by viewModel<NoteViewModel>()

インポートを使用します

import org.koin.Android.viewmodel.ext.Android.viewModel

依存関係から:

implementation "org.koin:koin-Android-viewmodel:+" //これを読んだときに+をw/eに最新に変更する

0
Blundell

この最新のアルファバージョンを使用します。

dependencies {
    implementation 'androidx.fragment:fragment-ktx:1.2.0-alpha01'
}
0
Birju Vachhani