LiveData--Transformations

1969 ワード

最近、会社は新しいGoogleフレームワークを使って、はっきり見て、jarパッケージではありません.メモをいくつか記録します.
Transformationsは、android.arch.lifecycleパッケージのツールクラスであり、新しいLiveDataオブジェクトの生成を変換するために使用されます.
public class Transformations {

    private Transformations() {
    }

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

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

            @Override
            public void onChanged(@Nullable X x) {
                LiveData newLiveData = func.apply(x);
                if (mSource == newLiveData) {
                    return;
                }
                if (mSource != null) {
                    result.removeSource(mSource);
                }
                mSource = newLiveData;
                if (mSource != null) {
                    result.addSource(mSource, new Observer() {
                        @Override
                        public void onChanged(@Nullable Y y) {
                            result.setValue(y);
                        }
                    });
                }
            }
        });
        return result;
    }
}
map(LiveData source, final Function func)この方法では、LiveDataの例、すなわちresultが新規に作成され、まずresultが追加される