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.1
khô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, minSdkVersion
21, "hoạt động trống")
Thêm android.arch.lifecycle:extensions:1.1.1
vào các phụ thuộc của app
mô-đun
Điều này sẽ cung cấp cho bạn một app/build.gradle
như:
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.DefaultFactory
mụ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
.