Livedata如何更新某个对像中的某个属性?

发布于 2022-09-12 03:00:43 字数 1481 浏览 17 评论 0

假设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());
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

乖乖兔^ω^ 2022-09-19 03:00:43

个人拙见:
现在的写法相比直接把30个字段写出来相当于加了一层代理嘛,你可以自由控制。
毕竟你把所有字段放一个类里面,最终也还是要写30个get和set的。
放到外面好处有两方面吧,一方面就参考代理模式,你不至于在数据模型里面去添加访问控制之类的,另一方面大概就是修改值和通知更新这两件事你可以分割开了,假设你要同时修改多个值,那其实有必要的话也可以只更新一次,把setValue单拿出去做一个方法就好了。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文