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