이 새로운 ViewModelProvider API로 인해 매우 혼란 스럽습니다 (ViewModelProviders는 더 이상 사용되지 않습니다)
새로운 변경 사항과 마찬가지로 새로운 생성자도 있습니다 (소스 코드).
#1
public ViewModelProvider(@NonNull ViewModelStoreOwner owner) {
this(owner.getViewModelStore(), owner instanceof HasDefaultViewModelProviderFactory
? ((HasDefaultViewModelProviderFactory) owner).getDefaultViewModelProviderFactory()
: NewInstanceFactory.getInstance());
}
# 2
public ViewModelProvider(@NonNull ViewModelStoreOwner owner, @NonNull Factory factory) {
this(owner.getViewModelStore(), factory);
}
#삼
public ViewModelProvider(@NonNull ViewModelStore store, @NonNull Factory factory) {
mFactory = factory;
mViewModelStore = store;
}
Gradle Depenedency :
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0-rc02"
따라서이 생성자의 require ViewModelStore
및 viewModelStoreOwner
.
문서:
@param store {@code ViewModelStore} 여기서 ViewModel이 저장됩니다.
@param 소유자 {@code ViewModelStore}가 {@code ViewModels}를 유지하는 데 사용되는 {@code ViewModelStoreOwner}
누구나 정의하고 사용할 수 있으며 개발자에게 실제로 무엇을 의미합니까?
ViewModelStoreOwner == activity / fragment입니까?
답변
누구나 정의하고 사용할 수 있으며 개발자에게 실제로 무엇을 의미합니까?
(A)은 ViewModelStore
컨테이너 A의 해당 저장 ViewModels로 간주 될 수있다 HashMap
. 여기서 key
string 값이고 value는 저장되는 ViewModel입니다 ( + ViewModel 클래스 표준 이름 ViewModelProvider
의 연결 사용 string_key
).
A ViewModelStoreOwner
는 단지 인터페이스입니다. getViewModelStore()
이 인터페이스에 의해 정의 된 모든 클래스 는의 소유자가 ViewModelStore
됩니다. 그런 다음이 클래스는를 유지하며 ViewModelStore
필요할 때 적절하게 복원 할 책임이 있습니다.
요구 사항에 따라 자체 버전의 소유자와 주를 구현할 수 있습니다.
ViewModelStoreOwner == activity / fragment입니까?
예. Android 소스 코드를 기반으로 Fragment
(from androidx.fragment.app
) 및 ComponentActivity
(from androidx.activity
) 모두 구현 ViewModelStoreOwner
합니다. 이 클래스는 a를 유지 viewModelStore
하고 값이 적절하게 복원됩니다.