[英]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.