LiveData+ViewModel用法1:获取数据

本文介绍了从MVP转向MVVM架构的过程中,对LiveData和ViewModel的初步使用体验。通过创建ViewModel并将其与Activity关联,展示了最简单的使用步骤。同时提到了databinding在XML中的应用可能增加复杂性,提供了两个简书参考链接以深入学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前一直使用MVP开发。刚上班看一下MVVM。LiveData+ViewModel确实比较给力,但看到databinding感觉xml写法复杂了很多,先记录下LiveData配合ViewModel使用。
LiveData 优点

不会再产生由于Activity处于stop状态而引起的崩溃。如果观察者的生命周期是不活跃的,例如 activity 处于后台,那么将不会收到任何 LiveData 事件。
总是实时刷新数据。当组件处于活跃状态或者从不活跃状态到活跃状态时总是能收到最新的数据
数据共享。多个页面同时监听同一个状态

ViewModel优点

存放与UI有关的数据,将UI与数据分割开。
最简单的用法

1.创建ViewModel

		
	public class SimpleViewModel extends ViewModel {
	
    private MutableLiveData<String> content;

    public MutableLiveData<String> getContent() {
        if (content == null) {
            content = new MutableLiveData<>();
        }
        return content;
    }

    public void setContent(MutableLiveData<String> content) {
        this.content = content;
    }
    

    /**
     * 获取数据
     */
    public void getContentData() {
    	//这里可以加一层Repository从网络/缓存加载数据
    	//执行完毕后调用 setValue/postValue方法,最终会回调Activity中的onChange方法
    	
        content.setValue("我是获取到的数据");
        //子线程调用  content.postValue(""我是获取到的数据");
    }
 	}
	
  1. ViewModel创建完成后, Activity去调用ViewModel
		btn = findViewById(R.id.btn);
        //构建ViewModel对象
        final SimpleViewModel model = ViewModelProviders.of(this).get(SimpleViewModel.class);

        //监听content属性变化,只要触发了setValue/postValue方法就会走
        model.getContent().observe(this, new Observer<String>() {
            @Override
            public void onChanged(@Nullable String s) {
                Log.e("SimpleActivity", "onChanged");
                btn.setText(s);
            }
        });
		
		//起始点
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
            //发起获取数据
                model.getContentData();
            }
        });

参考链接
https://www.jianshu.com/p/9e56c206956e
https://www.jianshu.com/p/b1208012b268

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值