簡體   English   中英

在 Android 中使用 Shared ViewModel 在不同 ViewModel 之間共享數據

[英]Share data between different ViewModels using a Shared ViewModel in Android

我有多個片段,每個片段都有一個不同的ViewModel 現在我想避免將數據作為參數在我的Fragments之間傳遞,而是在我的Viewmodels之間使用SharedViewModel並以某種方式繼承Sharedviewmodel來更新我的數據狀態。 有什么幫助嗎?

ViewModel 繼承可能是錯誤的工具,因為 ViewModel 被設計為與特定 Fragment 或 Activity 的生命周期相關聯。 更好的方法是擁有一個真正的“模型”類,用於管理單個 ViewModel 與之接口的持久數據狀態(單個或其他)。 例如:

class Database {

    private static Database instance = null;

    public static synchronized Database getInstance() {
        if( instance == null ) {
            instance = new Database();
        }
        return instance;
    }

    private Database() {}

    private int mValue = 0;
    public void setValue(int v) { mValue = v; }
    public int getValue() { return mValue; }
}


class FragmentAViewModel extends ViewModel {

    private final Database db;

    FragmentAViewModel() {
        db = Database.getInstance();
    }

    // FragmentA can set and get state on Database as needed
    void setValue(int v) {
        db.setValue(v);
    }
}

class FragmentBViewModel extends ViewModel {

    private final Database db;

    FragmentBViewModel() {
        db = Database.getInstance();
    }

    // FragmentB can set and get state on Database as needed
    int getValue() {
        return db.getValue();
    }
}

另一種選擇是創建一個活動級別的 ViewModel。 如果所有 Fragment 都在同一個 Activity 中,則它們可以共享該 Activity ViewModel。 例如:

mFragmentViewModel = ViewModelProviders.of(this).get(FragmentViewModel.class);

MainActivity a = (MainActivity)requireActivity();
mActivityViewModel = ViewModelProviders.of(a).get(MainActivityViewModel.class);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM