LiveData--Transformations

2017-09-27  本文已影响262人  miraclehen

最近公司用了一套很新的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将添加了

上一篇 下一篇

猜你喜欢

热点阅读