在這個例子中,我們將引入from()函數(shù)。使用這個特殊的“創(chuàng)建”函數(shù),我們可以從一個列表中創(chuàng)建一個Observable。Observable將發(fā)射出列表中的每一個元素,我們可以通過訂閱它們來對這些發(fā)出的元素做出響應。
為了實現(xiàn)和第一個例子同樣的結(jié)果,我們在每一個onNext()函數(shù)更新我們的適配器,添加元素并通知插入。
我們將復用和第一個例子同樣的結(jié)構(gòu)。主要的不同的是我們不再檢索已安裝的應用列表。列表由外部實體提供:
mApps = ApplicationsList.getInstance().getList();
獲得列表后,我們僅需將它響應化并填充RecyclerView的item:
private void loadList(List<AppInfo> apps) {
mRecyclerView.setVisibility(View.VISIBLE);
Observable.from(apps)
.subscribe(new Observer<AppInfo>() {
@Override
public void onCompleted() {
mSwipeRefreshLayout.setRefreshing(false);
Toast.makeText(getActivity(), "Here is the list!", Toast.LENGTH_LONG).show();
}
@Override
public void onError(Throwable e) {
Toast.makeText(getActivity(), "Something went wrong!", Toast.LENGTH_SHORT).show();
mSwipeRefreshLayout.setRefreshing(false);
}
@Override
public void onNext(AppInfo appInfo) {
mAddedApps.add(appInfo);
mAdapter.addApplication(mAddedApps.size() - 1,appInfo);
}
});
}
正如你看到的,我們將已安裝的應用程序列表作為參數(shù)傳進from()函數(shù),然后我們訂閱生成的Observable。觀察者和我們第一個例子中的觀察者十分相像。一個主要的不同是我們在onCompleted()函數(shù)中停掉進度條是因為我們一個一個的發(fā)射元素;第一個例子中的Observable發(fā)射的是整個list,因此在onNext()函數(shù)中停掉進度條的做法是安全的。