从列表创建一个Observable

在这个例子中,我们将引入from()函数。使用这个特殊的“创建”函数,我们可以从一个列表中创建一个Observable。Observable将发射出列表中的每一个元素,我们可以通过订阅它们来对这些发出的元素做出响应。

为了实现和第一个例子同样的结果,我们在每一个onNext()函数更新我们的适配器,添加元素并通知插入。

我们将复用和第一个例子同样的结构。主要的不同的是我们不再检索已安装的应用列表。列表由外部实体提供:

  1. mApps = ApplicationsList.getInstance().getList();

获得列表后,我们仅需将它响应化并填充RecyclerView的item:

  1. private void loadList(List<AppInfo> apps) {
  2. mRecyclerView.setVisibility(View.VISIBLE);
  3. Observable.from(apps)
  4. .subscribe(new Observer<AppInfo>() {
  5. @Override
  6. public void onCompleted() {
  7. mSwipeRefreshLayout.setRefreshing(false);
  8. Toast.makeText(getActivity(), "Here is the list!", Toast.LENGTH_LONG).show();
  9. }
  10. @Override
  11. public void onError(Throwable e) {
  12. Toast.makeText(getActivity(), "Something went wrong!", Toast.LENGTH_SHORT).show();
  13. mSwipeRefreshLayout.setRefreshing(false);
  14. }
  15. @Override
  16. public void onNext(AppInfo appInfo) {
  17. mAddedApps.add(appInfo);
  18. mAdapter.addApplication(mAddedApps.size() - 1,appInfo);
  19. }
  20. });
  21. }

正如你看到的,我们将已安装的应用程序列表作为参数传进from()函数,然后我们订阅生成的Observable。观察者和我们第一个例子中的观察者十分相像。一个主要的不同是我们在onCompleted()函数中停掉进度条是因为我们一个一个的发射元素;第一个例子中的Observable发射的是整个list,因此在onNext()函数中停掉进度条的做法是安全的。