1. ホーム
  2. android

[解決済み] 2020/21のアクティビティでViewModelのInstanceを取得する方法とは?

2022-03-04 09:27:51

質問

私はmvvmパターンを初めて使用します。私はメインアクティビティ用のViewModelを作成しました。今、私はメインアクティビティでViewModelのインスタンスを取得したいです。

Stackoverflowのほとんどのチュートリアルや回答では、以下のように使用することが推奨されています。 ViewModelProviders.of(... しかし、これは廃止されています。

で、stackoverflowのこの質問によると。 ViewModelProviders は 1.1.0 で非推奨となりました。 onCreateのメインアクティビティで、私は次のようにします(そして、私はすでにそれを実行していたと誓うことができました)。 mainActivityViewModel = new ViewModelProvider(this).get(MainActivityViewModel.class);

しかし、適切なコンストラクタが見つからないというエラーが表示されます。

error: no suitable constructor found for ViewModelProvider(MainActivity)

また、MainActivityがViewModelStoreOwnerであることを明確にするために、以下の変数を作成しました。 ViewModelStoreOwner vmso = this; で、その変数をコンストラクタに以下のように記述します。 mainActivityViewModel = new ViewModelProvider(vmso).get(MainActivityViewModel.class);

解決方法は?

gradleファイルを更新する必要があります。

<ブロッククオート

実装 'androidx.lifecycle:lifecycle-extensions:2.2.0' です。

そして、この変更により、あなたが言及したコンストラクタにActivityを渡すことができるようになりました。

mainActivityViewModel = new ViewModelProvider(this).get(MainActivityViewModel.class);