CẬP NHẬT 2020-06-16 : Hiện tại ViewModelProviders không được dùng nữa và không còn được sử dụng. Câu hỏi và câu trả lời này là từ cuối năm 2018, khi đó không phải là trường hợp. Câu hỏi và câu trả lời này cũng dành cho phiên bản Cấu trúc Kiến trúc cũ hơn ViewModelProviders, không phải phiên bản AndroidX.
Khi sử dụng phụ thuộc mới nhất android.arch.lifecycle:extensions:1.1.1không có lớp như vậy ViewModelProviders.
Có, có. Để chứng minh điều này:
Tạo một dự án mới trong Android Studio 3.2.1 (với mẫu Kotlin, minSdkVersion21, "hoạt động trống")
Thêm android.arch.lifecycle:extensions:1.1.1vào các phụ thuộc của appmô-đun
Điều này sẽ cung cấp cho bạn một app/build.gradlenhư:
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'
}
Sau đó, bạn sẽ thấy thư viện đó hiển thị trong "Thư viện bên ngoài" với lớp đó:

Và bạn sẽ có thể tham khảo lớp đó:
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)
}
}
Đi đến tài liệu cho ViewModelProviders, tôi thấy một bình luận nói rằng: Lớp này không được dùng ở cấp API 1.1.0. Sử dụng ViewModelProvider.AndroidViewModelFactory
Nhận xét đó nằm bên dưới ViewModelProviders.DefaultFactorymục nhập lớp và đề cập đến lớp đó, không phải ViewModelProviders:

Bất kỳ ý tưởng nào là sự thay thế của mã không dùng ở trên?
Sử dụng ViewModelProviders.