1. ホーム
  2. アンドロイド

[解決済み】ViewModelProvidersは1.1.0で非推奨になりました。

2022-04-05 22:28:59

質問

を見ると Googleドキュメント に対して ViewModel を取得する方法について、以下のサンプルコードが示されています。 ViewModel :

val model = ViewModelProviders.of(this).get(MyViewModel::class.java)

最新の依存関係を使用する場合 android.arch.lifecycle:extensions:1.1.1 そのようなクラスはありません。 ViewModelProviders .

に行く。 ドキュメント に対して ViewModelProviders というコメントを見かけました。

このクラスは API レベル 1.1.0 で非推奨となりました。ViewModelProvider.AndroidViewModelFactoryを使用してください。

を使おうとすると、問題なのは ViewModelProvider.AndroidViewModelFactory が見つからず、同等の of のインスタンスを取得するメソッドです。 ViewModel .

やってみたこと

ViewModelProvider.AndroidViewModelFactory.getInstance(application).create(PlayerViewHolder::class.java)

したがって、メソッドの名前 create 呼び出すたびにViewModelの新しいインスタンスが生成されます。

上記の非推奨のコードに代わるものは何か、何か心当たりはありますか?

解決方法は?

更新日 2020-06-16 : 現在 ViewModelProviders は非推奨であり、今後使用しないでください。この質問と回答は、そうでなかった2018年末のものです。また、この質問と回答は、古いArchitecture Components版である ViewModelProviders AndroidX版ではありません。


<ブロッククオート

最新の依存関係を使用する場合 android.arch.lifecycle:extensions:1.1.1 そのようなクラスはありません ViewModelProviders .

はい、ありますね。これを実証するために

  • Android Studio 3.2.1 で新規プロジェクトを作成します(Kotlin使用。 minSdkVersion 21, "空のアクティビティ" テンプレート)

  • 追加 android.arch.lifecycle:extensions:1.1.1 の依存関係にある app モジュール

これによって app/build.gradle のようなものです。

apply plugin: 'com.android.application'

apply plugin: 'kotlin-android'

apply plugin: 'kotlin-android-extensions'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.commonsware.myandroidarch"
        minSdkVersion 21
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation"org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'android.arch.lifecycle:extensions:1.1.1'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

すると、そのライブラリが、そのクラスで "外部ライブラリ" に表示されるのがわかると思います。

そして、そのクラスを参照することができるようになります。

package com.commonsware.myandroidarch

import android.arch.lifecycle.ViewModelProviders
import android.support.v7.app.AppCompatActivity
import android.os.Bundle

class MainActivity : AppCompatActivity() {

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    val provider = ViewModelProviders.of(this)
  }
}

ViewModelProvidersのドキュメントを見に行くと、こんなコメントがありました。このクラスは、API レベル 1.1.0 で非推奨となりました。ViewModelProvider.AndroidViewModelFactoryをお使いください。

そのコメントは、その下にある ViewModelProviders.DefaultFactory クラスのエントリで、そのクラスについて言及しているのであって ViewModelProviders :

上記の非推奨のコードの置き換えは何だと思いますか?

使用方法 ViewModelProviders .