1.4.4 从列表创建一个Observable

优质
小牛编辑
125浏览
2023-12-01

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

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

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

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);
                }
            });
}

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