Android LiveData 首次数据不发送的两种设计方案
如何设计 LiveData 首次数据不发送
在使用 LiveData 时,有时我们希望第一次数据不发送出去,比如当数据来源于网络请求,或者需要进行一些初始化操作时。为了实现这一目标,可以通过以下两种方式进行设计:
1. 使用 MediatorLiveData
创建 MediatorLiveData 对象,将 LiveData 对象的数据作为源 LiveData,然后通过 MediatorLiveData 的 addSource 方法添加一个 Observer 监听器。在 Observer 中,可以通过判断是否是首次数据来决定是否发送数据。
LiveData<String> sourceLiveData = new MutableLiveData<>();
MediatorLiveData<String> mediatorLiveData = new MediatorLiveData<>();
mediatorLiveData.addSource(sourceLiveData, new Observer<String>() {
private boolean isFirstTime = true;
@Override
public void onChanged(String data) {
if (isFirstTime) {
isFirstTime = false;
} else {
mediatorLiveData.setValue(data);
}
}
});
2. 自定义 LiveData
继承 LiveData 类,重写 onActive 方法,在 onActive 方法中判断是否是首次数据,如果是首次数据则不发送。
public class MyLiveData<T> extends LiveData<T> {
private boolean isFirstTime = true;
@Override
protected void onActive() {
super.onActive();
if (!isFirstTime) {
// 发送数据
setValue(getValue());
} else {
isFirstTime = false;
}
}
}
通过以上两种设计方案,在观察 LiveData 对象时,首次数据就不会被发送出去。
原文地址: https://www.cveoy.top/t/topic/lJk2 著作权归作者所有。请勿转载和采集!