我正在研究將我的(Android)應用程序中的某些邏輯轉換爲使用RxJava,但是我正在努力想出一種方法來執行一些更高級的邏輯。使用RxJava更新並保留現有數據
用例如下:我想向用戶展示一種Feed。 Feed包含來自不同來源的項目,例如消息,文章等。由於API限制,應用程序本身必須收集各個資源並將其顯示在一個列表中。是
例如,假設我在飼料項目如下:
class FeedItem {
Type feedItem; // Type of the item, e.g. article, message, etc.
...
}
目前,該飼料是建立在一個單獨的線程,並且UI使用監聽器當飼料已更新通知。爲了讓你瞭解它是如何完成的,下面是一些(僞)Java代碼(線程和其他管理代碼爲了清楚起見而被省略)。
class FeedProducer {
List<FeedItem> currentData = new ArrayList();
public void refreshData() {
for (FeedSource source: getFeedSources()) {
Type sourceType = source.getType();
// Remove existing items
currentData.removeIf(item -> item.feedItem.equals(sourceType));
List<FeedItem> newItems = source.produceItems();
// Add the new items
currentData.addAll(newItems);
// Notify the UI things have changed
notifyDataChanged(currentData);
}
// Notify the UI we are done loading
notifyLoadingComplete();
}
}
這種方法refreshData()
將在每次用戶想要刷新數據時被調用。這樣,可以僅更新一些源,而其他源保持不變(例如通過更改返回值getFeedSources()
)。
這些來源也在應用程序的其他部分單獨使用;我已經將它們轉換爲Observables那裏。這使事情變得更容易,例如如果數據庫發生更改,則Observable簡單地將更改推送到UI。
因此,我的問題是如何(優雅地)將這些可觀察的源代碼合併到一個Observable中,但是前面的結果存在一個「全局」狀態。我研究過各種結合運營商,但還沒有找到我需要的。我很抱歉,如果我忽略了一些顯而易見的事情,因爲我對RxJava相當陌生。