0
我为什么下面的代码不工作有点糊涂了:的Android MediatorLiveData观察者
MutableLiveData<String> mutableTest = new MutableLiveData<>();
MediatorLiveData<String> mediatorTest = new MediatorLiveData<>();
mediatorTest.addSource(mutableTest, test -> {
Timber.d(test);
});
mutableTest.setValue("bla!");
这段代码看起来非常简单,但是调试器不进入回调并没有被记录到控制台...
编辑:应该不是这个工作呢?
MutableLiveData<String> mutableTest = new MutableLiveData<>();
MediatorLiveData<String> mediatorTest = new MediatorLiveData<>();
mediatorTest.observe(loginActivity, str -> Timber.d(str));
mediatorTest.addSource(mutableTest, str -> Timber.d(str));
mutableTest.setValue("bla!");
没有什么是观察'mediatorTest'。没有活跃的观察员时,会跳过很多东西。 – CommonsWare
@CommonsWare在这个例子中,观察者不是'mutableTest' observable和'mediatorTest'吗?为什么我需要观察'mediatorTest'?我找不到一个简化的演示,它给了我期望的结果。我认为'addSource'应该是将侦听器添加到'mediatorTest'观察器,其中'mutableTest'在第一个参数中作为可观察值传递,而lambda在第二个参数中作为回调传递。 – Trace
'mediatorTest'既是观察者又是观察者。毕竟这是一个'LiveData',这意味着它是可观察的。 “为什么我需要观察mediatorTest?” - 必须消耗数据。这是一个观察员。你有两个'LiveData'对象,但只有一个被观察到。 “MediatorLiveData”的主要用途AFAIK用于转换,并且在那里,转换方法(例如'map()')返回'MediatorLiveData',然后观察它以查看转换的结果。 – CommonsWare