这里指的复杂主要是表单要填的内容很多,再加上多个字段都需要联动的情况下怎么才算是比较好的写法?
项目接近于 OA 办公类的 app 。某些页面要填写编辑表单,一个表单常常有 20-30 个可编辑项
假设 FormBean 这个实体类对应的表单对象 UserForm 有 30 个字段。每个字段都能编辑
那么如果我在页面上只对 Name 字段进行修改的话,怎么更新 UserForm 并且触发 LiveData 的 onChanged 事件呢?
目前在网上的文章 Livedata 都是用 MutableLiveData<String>之类的基本类型做例子,没找到怎么更新某个具体的实体类的方式
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 方法里先通关 getValue()获取 livedata 持有的实体类,更新对应的字段后再重新 setValue 回去。我不知道这算不算好办法,但是暂时想不出其他办法了
UserForm.getValue().setName(userName);
UserForm.setValue(UserForm.getValue());
}
}
我目前觉得我的写法有点过于浪费,因为这样写就算只更新一个 Name 字段也会使得所有观察了 UserForm 的控件刷新一次。
有没有兄弟可以告诉我这种情况怎么办,或者给一个思路。
昨天看了一天的 github,大部分用了 jetpack 的示例都是获取数据 ---》 展示数据。最多就修改一个 id 之类的。很简洁也很漂亮。但是我发现我如果要照这样写,我就能在页面上写出 30 个 MutableLiveData<String> field1 了。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.