我有多个 fragment ,每个 fragment 都有不同的 ViewModel
.现在我想避免在我的 Fragments
之间传递数据作为参数。而是使用 SharedViewModel
在我的 Viewmodels
之间并以某种方式继承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();
}
}
另一种选择是创建一个 Activity 级别的 ViewModel。如果所有 fragment 都在同一个 Activity 中,它们可以共享该 Activity View 模型。例如:
mFragmentViewModel = ViewModelProviders.of(this).get(FragmentViewModel.class);
MainActivity a = (MainActivity)requireActivity();
mActivityViewModel = ViewModelProviders.of(a).get(MainActivityViewModel.class);
关于android - 在 Android 中使用 Shared ViewModel 在不同 ViewModel 之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60584377/