ViewModelStore 및 viewModelStoreOwner 란 무엇입니까?


12

이 새로운 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 ViewModelStoreviewModelStoreOwner.

문서:

@param store {@code ViewModelStore} 여기서 ViewModel이 저장됩니다.

@param 소유자 {@code ViewModelStore}가 {@code ViewModels}를 유지하는 데 사용되는 {@code ViewModelStoreOwner}


누구나 정의하고 사용할 수 있으며 개발자에게 실제로 무엇을 의미합니까?


ViewModelStoreOwner == activity / fragment입니까?

답변:


6

누구나 정의하고 사용할 수 있으며 개발자에게 실제로 무엇을 의미합니까?

(A)은 ViewModelStore컨테이너 A의 해당 저장 ViewModels로 간주 될 수있다 HashMap. 여기서 keystring 값이고 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하고 값이 적절하게 복원됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.