LiveData--Transformations

最近公司用了一套很新的Google框架,看清楚,是一整套,不是一两个jar包。在记录下一些笔记。

Transformations是android.arch.lifecycle包中一个工具类,用来转换生成一个新的 LiveData对象。

public class Transformations {

    private Transformations() {
    }

   
    @MainThread
    public static <X, Y> LiveData<Y> map(LiveData<X> source, final Function<X, Y> func) {
        final MediatorLiveData<Y> result = new MediatorLiveData<>();
        result.addSource(source, new Observer<X>() {
            @Override
            public void onChanged(@Nullable X x) {
                result.setValue(func.apply(x));
            }
        });
        return result;
    }

    @MainThread
    public static <X, Y> LiveData<Y> switchMap(LiveData<X> trigger,
            final Function<X, LiveData<Y>> func) {
        final MediatorLiveData<Y> result = new MediatorLiveData<>();
        result.addSource(trigger, new Observer<X>() {
            LiveData<Y> mSource;

            @Override
            public void onChanged(@Nullable X x) {
                LiveData<Y> newLiveData = func.apply(x);
                if (mSource == newLiveData) {
                    return;
                }
                if (mSource != null) {
                    result.removeSource(mSource);
                }
                mSource = newLiveData;
                if (mSource != null) {
                    result.addSource(mSource, new Observer<Y>() {
                        @Override
                        public void onChanged(@Nullable Y y) {
                            result.setValue(y);
                        }
                    });
                }
            }
        });
        return result;
    }
}

map(LiveData<X> source, final Function<X, Y> func)
在这个方法中,新建了一个LiveData实例,也就是result,首先result将添加了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,951评论 19 139
  • Spark SQL, DataFrames and Datasets Guide Overview SQL Dat...
    草里有只羊阅读 18,378评论 0 85
  • 上一节曾今提到过LiveData是生命周期感知组件的示例。与ViewModel一起使用LiveData可以在遵循A...
    samychen阅读 6,230评论 1 1
  • 一杯薄酒 默默对余辉 黄昏恰逢失意人 百无聊奈 追忆在远方 谁言年少不识愁 如人饮水 悟尽其滋味 奈何谁人知我心?
    贰拾一_阅读 460评论 3 8
  • 所谓“千里之行,始于足下”,人要走路跑步,必须先动用两脚。中国汉字中,与“足”相关的字就有:跑、跳、跃、跌、踩等一...
    大科技杂志社阅读 725评论 0 0