[解決済み】ViewModelProvidersは1.1.0で非推奨になりました。
質問
を見ると
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
.
関連
-
[解決済み】まだ警告が出る:設定 'compile' は時代遅れで 'implementation' に置き換わった。
-
[解決済み】onCreateOptionsMenu(Menu メニュー)とは何ですか?)
-
[解決済み】ビットマップを保存する場所について
-
[解決済み】android.content.res.Resources$NotFoundExceptionの取得:androidにリソースが存在する場合でも例外が発生する。
-
[解決済み] SDKの場所がandroid studioで見つからない
-
[解決済み] BIOSのセキュリティ設定でVT-xを有効にする(お使いのコンピュータのドキュメントを参照)。
-
[解決済み] Gradle DSL メソッドが見つかりません:'compile()'
-
[解決済み] ADBエラー:デーモンに接続できない
-
[解決済み] Android getResources().getDrawable() 非推奨 API 22
-
[解決済み] Android 6.0 Marshmallow (API 23) で getColor(int id) が非推奨になりました。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】「ArrayAdapterはリソースIDがTextViewであることが必要」XMLの問題点
-
[解決済み] [Solved] Error "File google-services.json is missing from module root folder. これがないとGoogle Services Pluginは機能しません" [重複]。
-
[解決済み】apkファイルのインストール中に「パッケージが破損しているようです」というエラーが発生する。
-
[解決済み】起動アクティビティを特定できませんでした。デフォルトのアクティビティが見つかりませんでした
-
[解決済み】アクティビティにない場所でのgetLayoutInflater()の呼び出し
-
[解決済み】Android 8:クリアテキストのHTTPトラフィックが許可されない
-
[解決済み】IllegalStateException: ViewPager で onSaveInstanceState の後にこのアクションを実行できません。
-
[解決済み] Mockito lenient() を使用する場合
-
[解決済み] Android: @drawable/picture を drawable に変換するのに失敗しました。
-
[解決済み] 2020/21のアクティビティでViewModelのInstanceを取得する方法とは?