MVVM系列之二:LiveData

LiveData liveDataMap = Transformations.map(liveData1, new Function<Integer, String>() {

@Override

public String apply(Integer input) {

String s = input + " + Transformations.map";

Log.i(TAG, "apply: " + s);

return s;

}

});

liveDataMap.observe(this, new Observer() {

@Override

public void onChanged(String s) {

Log.i(TAG, "onChanged1: "+s);

}

});

liveData1.setValue(100);

使用很简单:原本的liveData1 没有添加观察者,而是使用Transformations.map()方法 对liveData1的数据进行的修改 生成了新的liveDataMap,liveDataMap添加观察者,最后liveData1设置数据 。

此例子把 Integer类型的liveData1 修改为String类型的liveDataMap。结果如下:

2020-12-06 17:01:56.095 21998-21998/com.hfy.androidlearning I/Lifecycle_Test: apply: 100 + Transformations.map

2020-12-06 17:01:56.095 21998-21998/com.hfy.androidlearning I/Lifecycle_Test: onChanged1: 100 + Transformations.map

2.3.2 数据切换 - Transformations.switchMap

如果想要根据某个值 切换观察不同LiveData数据,则可以使用Transformations.switchMap()方法。

//两个liveData,由liveDataSwitch决定 返回哪个livaData数据

MutableLiveData liveData3 = new MutableLiveData<>();

MutableLiveData liveData4 = new MutableLiveData<>();

//切换条件LiveData,liveDataSwitch的value 是切换条件

MutableLiveData liveDataSwitch = new MutableLiveData<>();

//liveDataSwitchMap由switchMap()方法生成,用于添加观察者

LiveData liveDataSwitchMap = Transformations.switchMap(liveDataSwitch, new Function<Boolean, LiveData>() {

@Override

public LiveData apply(Boolean input) {

//这里是具体切换逻辑:根据liveDataSwitch的value返回哪个liveData

if (input) {

return liveData3;

}

return liveData4;

}

});

liveDataSwitchMap.observe(this, new Observer() {

@Override

public void onChanged(String s) {

Log.i(TAG, "onChanged2: " + s);

}

});

boolean switchValue = true;

liveDataSwitch.setValue(switchValue);//设置切换条件值

liveData3.setValue(“liveData3”);

liveData4.setValue(“liveData4”);

liveData3、liveData4是两个数据源,有一个判断条件来决定 取哪一个数据 ,这个条件就是liveDataSwitch,如果值为true则取liveData3,false则取liveData4。 Transformations.switchMap()就用于实现这一逻辑,返回值liveDataSwitchMap添加观察者就可以了。 结果如下:

2020-12-06 17:33:53.844 27347-27347/com.hfy.androidlearning I/Lifecycle_Test: switchValue=true

2020-12-06 17:33:53.847 27347-27347/com.hfy.androidlearning I/Lifecycle_Test: onChanged2: liveData3

2020-12-06 17:34:37.600 27628-27628/com.hfy.androidlearning I/Lifecycle_Test: switchValue=false

2020-12-06 17:34:37.602 27628-27628/com.hfy.androidlearning I/Lifecycle_Test: onChanged2: liveData4

(Transformations对LivaData这两个用法和Rxjava简直一毛一样)

2.3.3

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值