假设FormBean表单对象有 30个字段。每个字段都能编辑
那么如果我在页面上只对Name字段进行修改的话,怎么更新UserForm并且触发LiveData的onChanged事件呢?
目前在网上的文章Livedata都是基本类型,没找到怎么更新某个具体的实体类的方式
public class MainViewModel extends ViewModel {
/*
公司的项目接近OA办公类产品,有很多表单需要填写和修改
假设这个FormBean表单对象有 30个字段。每个字段都能编辑,如果每个字段都单独创建一个livedata对象的话,会变成很长的代码
private MutableLiveData<String> field1;
private MutableLiveData<String> field2;
private MutableLiveData<String> field3;
private MutableLiveData<String> field4;
private MutableLiveData<String> field5;
........
private MutableLiveData<String> field29;
private MutableLiveData<String> field30;
然后每个字段都要写get和set方法。每个字段都要设置observe监听,这样的代码算是最佳实践吗?
*/
//如果只创建一个FormBean的实体类,只设置一次observe监听,但是如果更新其中的每一个字段呢?
private MutableLiveData<FormBean> UserForm;
public LiveData<FormBean> getCurrentUserForm() {
if (UserForm == null) {
UserForm = new MutableLiveData<FormBean>();
FormBean formBean = new FormBean();
formBean.setName("aaabbb");
formBean.setId(123);
UserForm.setValue(formBean);
}
return UserForm;
}
public void setField1(String userName) {
//我目前想的方法是在set方法里先获取livedata持有的实体类,更新对应的字段后再重新setValue回去。我不知道这算不算好办法,但是暂时想不出其他办法了
UserForm.getValue().setName(userName);
UserForm.setValue(UserForm.getValue());
}
}
个人拙见:
现在的写法相比直接把30个字段写出来相当于加了一层代理嘛,你可以自由控制。
毕竟你把所有字段放一个类里面,最终也还是要写30个get和set的。
放到外面好处有两方面吧,一方面就参考代理模式,你不至于在数据模型里面去添加访问控制之类的,另一方面大概就是修改值和通知更新这两件事你可以分割开了,假设你要同时修改多个值,那其实有必要的话也可以只更新一次,把setValue单拿出去做一个方法就好了。