ViewModelStore และ viewModelStoreOwner คืออะไร


12

ฉันสับสนมากเนื่องจาก ViewModelProvider api ใหม่นี้ (ViewModelProviders เลิกใช้แล้ว)

เช่นเดียวกับการเปลี่ยนแปลงใหม่มี Constructors ใหม่ด้วย (ซอร์สโค้ด)

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

การพึ่งพา Gradle:

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

ดังนั้นเหล่านี้สร้างต้อง และViewModelStoreviewModelStoreOwner

หมอ:

@param store {@code ViewModelStore} โดยที่ ViewModels จะถูกเก็บไว้

@param เจ้าของ {@code ViewModelStoreOwner} ซึ่ง {@link ViewModelStore} จะถูกใช้เพื่อเก็บ {@code ViewModels}


ทุกคนสามารถกำหนดพวกเขาและวิธีการใช้พวกเขาและสิ่งที่พวกเขามีความหมายกับเรานักพัฒนา?


ViewModelStoreOwner == กิจกรรม / ส่วนคืออะไร

คำตอบ:


6

ทุกคนสามารถกำหนดพวกเขาและวิธีการใช้พวกเขาและสิ่งที่พวกเขามีความหมายกับเรานักพัฒนา?

ViewModelStoreถือได้ว่าเป็นภาชนะที่เก็บ ViewModels HashMapในส่วน โดยที่keyis คือค่าสตริงและค่าคือ ViewModel ที่ถูกบันทึก ( ViewModelProviderใช้การต่อข้อมูลstring_keyชื่อ canonical + ViewModel class)

A ViewModelStoreOwnerเป็นเพียงส่วนต่อประสาน ระดับใด ๆ ที่ดำเนินการที่กำหนดโดยอินเตอร์เฟซนี้จะกลายเป็นเจ้าของgetViewModelStore() ViewModelStoreชั้นเรียนนี้จะรักษาViewModelStoreและควรรับผิดชอบในการคืนค่าอย่างเหมาะสมเมื่อจำเป็น

เราสามารถใช้เวอร์ชั่นของเจ้าของและรัฐตามความต้องการได้

ViewModelStoreOwner == กิจกรรม / ส่วนคืออะไร

ใช่. ขึ้นอยู่กับซอร์สโค้ด Android ของทั้งสองFragment(จากandroidx.fragment.app) และComponentActivity(จากandroidx.activity) ViewModelStoreOwnerการดำเนินการ คลาสเหล่านี้รักษาviewModelStoreและค่าจะถูกกู้คืนอย่างเหมาะสม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.