UPDATE 2020-06-16 : Derzeit ViewModelProviders
veraltet und sollte nicht mehr verwendet werden. Diese Frage und Antwort stammte von Ende 2018, als dies nicht der Fall war. Diese Frage und Antwort gilt auch für die ältere Edition von Architecture Components ViewModelProviders
, nicht für die AndroidX-Edition.
Bei Verwendung der neuesten Abhängigkeit android.arch.lifecycle:extensions:1.1.1
gibt es keine solche Klasse ViewModelProviders
.
Ja da ist. Um dies zu demonstrieren:
Erstellen Sie ein neues Projekt in Android Studio 3.2.1 (mit Kotlin, minSdkVersion
21, Vorlage "Leere Aktivität").
Fügen Sie android.arch.lifecycle:extensions:1.1.1
zu den Abhängigkeiten des app
Moduls hinzu
Dies gibt Ihnen ein app/build.gradle
wie:
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'
}
Sie werden dann sehen, dass die Bibliothek in "Externe Bibliotheken" mit dieser Klasse angezeigt wird:
Und Sie können auf diese Klasse verweisen:
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)
}
}
In der Dokumentation zu ViewModelProviders wurde ein Kommentar angezeigt, der besagt: Diese Klasse ist in API-Version 1.1.0 veraltet. Verwenden Sie ViewModelProvider.AndroidViewModelFactory
Dieser Kommentar befindet sich unter dem ViewModelProviders.DefaultFactory
Klasseneintrag und bezieht sich auf diese Klasse, nicht auf ViewModelProviders
:
Irgendwelche Ideen, was ist der Ersatz für veralteten Code oben?
Verwenden Sie ViewModelProviders
.