Android 基础认识 LiveData(待补充)

133 阅读1分钟

原文地址:LiveData 概览

合并多个 LiveData 源

MediatorLiveDataLiveData 的子类,允许您合并多个 LiveData 源。只要任何原始的 LiveData 源对象发生更改,就会触发 MediatorLiveData 对象的观察者。

例如,如果界面中有可以从本地数据库或网络更新的 LiveData 对象,则可以向 MediatorLiveData 对象添加以下源:

  • 与存储在数据库中的数据关联的 LiveData 对象。
  • 与从网络访问的数据关联的 LiveData 对象。

您的 Activity 只需观察 MediatorLiveData 对象即可从这两个源接收更新。

考虑以下情形:我们有 2 个 LiveData 实例,我们将它们命名为 liveData1 和 liveData2,并且我们希望将它们的发射合并在一个对象中:liveDataMerger。然后,liveData1 和 liveData2 将成为 MediatorLiveData liveDataMerger 的源,每次对它们之一调用 onChanged 回调时,我们都在 liveDataMerger 中设置一个新值。

 LiveData liveData1 = ...;
 LiveData liveData2 = ...;

 MediatorLiveData liveDataMerger = new MediatorLiveData<>();
 liveDataMerger.addSource(liveData1, value -> liveDataMerger.setValue(value));
 liveDataMerger.addSource(liveData2, value -> liveDataMerger.setValue(value));

举个例子,我们只希望将 liveData1 发出的 10 个值合并到 liveDataMerger 中。然后,在发送 10 个值之后,我们可以停止监听 liveData1 并将其作为源移除。

 liveDataMerger.addSource(liveData1, new Observer() {
      private int count = 1;

      @Override public void onChanged(@Nullable Integer s) {
          count++;
          liveDataMerger.setValue(s);
          if (count > 10) {
              liveDataMerger.removeSource(liveData1);
          }
      }
 });