viewModels で viewModel を取得する方法 (fragment-ktx) 質問する

viewModels で viewModel を取得する方法 (fragment-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(アプリ)に追加しました。

    //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"
}

参照

上記のすべてを適用すると、問題は解決されます。

おすすめ記事