我正在我的Android项目中使用MVVM。我有创建和编辑片段。这两个片段的功能大致相同。如果我编写的函数在公共视图模型中具有相同的功能,我可以将公共视图模型与自己的片段视图模型一起使用吗?例如,我可以像下面这样使用吗?
CommonViewModel(){
void selectPriority()
.
.
.
otherthings...}
CreateViewModel(){
LiveData<CommonViewModel> cvm;
.
.
.
otherthings...}
EditViewModel(){
LiveData<CommonViewModel> cvm;
.
.
.
otherthings...}
取而代之的是这个
CreateViewModel(){
void selectPriority()
.
.
.
otherthings...}
EditViewModel(){
void selectPriority()
.
.
.
otherthings...}
或者你能向我建议我可以使用的不同方式吗?
你可以通过继承来做到这一点,制作一个通用的视图模型,并在编辑和创建视图模型中扩展它,比如
class CreatEditViewModel{
public void selectPriority(){
//to something....
}
public void other(){
//to something....
}
}
class CreateViewModel extends CreatEditViewModel{
}
class EditViewModel extends CreatEditViewModel{
}
您不能将这些逻辑放在 BaseViewModel 中,因为 BaseViewModel 由所有 ViewModel 扩展。
您可以在继承的帮助下,创建一个基类并将所有通用功能放在那里,然后再创建两个继承基类的类。 这样你就可以实现你想要的。
例如
class BaseViewModel{
public void selectPriority(){
}
public void other(){
}
}
class CreateViewModel extends BaseViewModel{
}
class EditViewModel extends BaseViewModel{
}
在上面的例子中,CreateViewModel 和 EditViewModel 都继承了 BaseViewModel,因此它们可以访问 BaseViewModel 类的所有函数。所有常用方法都将在BaseViewModel中使用。您将在 CreateViewModel 和 EditViewModel 中创建的方法对彼此不可见。