1. ホーム
  2. android

[解決済み] viewModelsでviewModelを取得するには?(フラグメント-ktx)

2022-12-04 12:28:17

質問

アクティビティとそのフラグメントのすべてに対して、単一のビューモデルを使用しています。

そこで、初期化するために 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 を使おうとすると、その参照は見つかりませんでした。

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

どのように解決するのですか?

ようやく安定版を手に入れました。

に移行した後 implementation 'androidx.fragment:fragment-ktx:1.1.0' に移行した後、別の問題に直面しました。

コンパイラーエラーです。

JVM ターゲット 1.8 でビルドされたバイトコードを、JVM ターゲット 1.6 でビルドされているバイトコードにインライン化することができません。 JVMターゲット1.6でビルドされているバイトコードにインライン化することはできません。

build.gradle (モジュール:app)

compileOptions {
        sourceCompatibility = 1.8
        targetCompatibility = 1.8
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }

参照

上記をすべて適用したところ、問題は解決しました。

皆さん、ありがとうございます。