ViewModelStore và viewModelStoreOwner là gì?


12

Tôi rất bối rối vì api ViewModelProvider mới này (ViewModelProviders không được dùng nữa)

Cũng như những thay đổi mới, cũng có Trình xây dựng mới (Mã nguồn).

# 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);
    }

# 3

 public ViewModelProvider(@NonNull ViewModelStore store, @NonNull Factory factory) {
        mFactory = factory;
        mViewModelStore = store;
    }

Độ trễ cấp độ:

implementation "androidx.lifecycle:lifecycle-extensions:2.2.0-rc02"

Vì vậy, những người xây dựng yêu cầu ViewModelStoreviewModelStoreOwner.

Bác sĩ:

@param store {@code ViewModelStore} nơi ViewModels sẽ được lưu trữ.

@param sở hữu {@code ViewModelStoreOwner} có {@link ViewModelStore} sẽ được sử dụng để giữ lại {@code ViewModels}


Bất cứ ai cũng có thể định nghĩa chúng và làm thế nào để sử dụng chúng và những gì chúng thực sự có ý nghĩa với nhà phát triển của chúng tôi?


là ViewModelStoreOwner == hoạt động / đoạn?

Câu trả lời:


6

Bất cứ ai cũng có thể định nghĩa chúng và làm thế nào để sử dụng chúng và những gì chúng thực sự có ý nghĩa với nhà phát triển của chúng tôi?

A ViewModelStorecó thể được coi là một thùng chứa ViewModels trong a HashMap. Trong đó keygiá trị chuỗi và giá trị là ViewModel đang được lưu ( ViewModelProvidersử dụng cách ghép string_keytên chính tắc của lớp + ViewModel).

A ViewModelStoreOwnerchỉ là một giao diện. Bất kỳ lớp nào thực hiện getViewModelStore()định nghĩa bởi giao diện này sẽ trở thành chủ sở hữu của ViewModelStore. Lớp này sau đó duy trì ViewModelStorevà nên có trách nhiệm khôi phục lại nó một cách thích hợp khi cần thiết.

Chúng tôi có thể thực hiện phiên bản riêng của chủ sở hữu và nhà nước dựa trên yêu cầu.

là ViewModelStoreOwner == hoạt động / đoạn?

Đúng. Dựa trên mã nguồn Android, cả hai Fragment(từ androidx.fragment.app) & ComponentActivity(từ androidx.activity) đều thực hiện ViewModelStoreOwner. Các lớp này duy trì một viewModelStorevà giá trị được phục hồi thích hợp.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.