在Android中使用共享ViewModel在不同ViewModel之间共享数据
我有多个片段,每个片段都有一个不同的在Android中使用共享ViewModel在不同ViewModel之间共享数据,android,mvvm,Android,Mvvm,我有多个片段,每个片段都有一个不同的ViewModel。现在,我想避免将数据作为片段之间的参数传递,而是在视图模型之间使用共享视图模型,并以某种方式继承共享视图模型,以更新数据状态。有什么帮助吗?ViewModel继承可能是用于此目的的错误工具,因为ViewModel被设计为绑定到特定片段或活动的生命周期。更好的方法是使用一个真正的“模型”类来管理各个ViewModels接口的持久数据状态(单例或其他)。例如: class Database { private static Datab
ViewModel
。现在,我想避免将数据作为片段
之间的参数传递,而是在视图模型
之间使用共享视图模型
,并以某种方式继承共享视图模型
,以更新数据状态。有什么帮助吗?ViewModel继承可能是用于此目的的错误工具,因为ViewModel被设计为绑定到特定片段或活动的生命周期。更好的方法是使用一个真正的“模型”类来管理各个ViewModels接口的持久数据状态(单例或其他)。例如:
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();
}
}
mFragmentViewModel = ViewModelProviders.of(this).get(FragmentViewModel.class);
MainActivity a = (MainActivity)requireActivity();
mActivityViewModel = ViewModelProviders.of(a).get(MainActivityViewModel.class);
另一个选项是创建活动级别的ViewModel。如果所有片段都在同一个活动中,则它们可以共享该活动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();
}
}
mFragmentViewModel = ViewModelProviders.of(this).get(FragmentViewModel.class);
MainActivity a = (MainActivity)requireActivity();
mActivityViewModel = ViewModelProviders.of(a).get(MainActivityViewModel.class);
ViewModel继承可能是用于此目的的错误工具,因为ViewModel被设计为绑定到特定片段或活动的生命周期。更好的方法是使用一个真正的“模型”类来管理各个ViewModels接口的持久数据状态(单例或其他)。例如:
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();
}
}
mFragmentViewModel = ViewModelProviders.of(this).get(FragmentViewModel.class);
MainActivity a = (MainActivity)requireActivity();
mActivityViewModel = ViewModelProviders.of(a).get(MainActivityViewModel.class);
另一个选项是创建活动级别的ViewModel。如果所有片段都在同一个活动中,则它们可以共享该活动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();
}
}
mFragmentViewModel = ViewModelProviders.of(this).get(FragmentViewModel.class);
MainActivity a = (MainActivity)requireActivity();
mActivityViewModel = ViewModelProviders.of(a).get(MainActivityViewModel.class);
我听说一个片段可以有一个sharedviewmodel和一个私有viewmodel,这是由viewmodel提供者提供的。。我只是不知道如何实现,我听说一个片段可以有一个sharedviewmodel和一个私有viewmodel,这是由viewmodel提供者提供的。。我只是不知道如何实现我试图避免使用repositories如果您试图创建一个超过给定片段或活动生命周期的类,那么这就是您所描述的。ViewModel是一个生命周期感知组件。我试图避免使用Repositories如果您试图创建一个超过给定片段或活动生命周期的类,那么这就是您所描述的。ViewModel是一个生命周期感知组件。