如何设计 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 对象时,首次数据就不会被发送出去。

Android LiveData 首次数据不发送的两种设计方案

原文地址: https://www.cveoy.top/t/topic/lJk2 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录