MISE À JOUR 2020-06-16 : est actuellement ViewModelProviders
obsolète et ne devrait plus être utilisée. Cette question et cette réponse dataient de fin 2018, alors que ce n'était pas le cas. Cette question et réponse concerne également l'ancienne édition des composants d'architecture ViewModelProviders
, et non l'édition AndroidX.
Lors de l'utilisation de la dernière dépendance android.arch.lifecycle:extensions:1.1.1
, une telle classe n'existe pas ViewModelProviders
.
Oui il y a. Pour démontrer ceci:
Créer un nouveau projet dans Android Studio 3.2.1 (avec Kotlin, minSdkVersion
21, modèle "activité vide")
Ajouter android.arch.lifecycle:extensions:1.1.1
aux dépendances du app
module
Cela vous donnera un app/build.gradle
comme:
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'
}
Vous verrez alors cette bibliothèque apparaître dans "Bibliothèques externes" avec cette classe:
Et vous pourrez référencer cette classe:
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)
}
}
En allant à la documentation de ViewModelProviders, j'ai vu un commentaire disant: Cette classe était obsolète au niveau d'API 1.1.0. Utilisez ViewModelProvider.AndroidViewModelFactory
Ce commentaire se trouve sous l' ViewModelProviders.DefaultFactory
entrée de classe et fait référence à cette classe, pas ViewModelProviders
:
Des idées sur ce qu'est le remplacement du code obsolète ci-dessus?
Utilisez ViewModelProviders
.