从列表创建一个Observable
在这个例子中,我们将引入from()函数。使用这个特殊的“创建”函数,我们可以从一个列表中创建一个Observable。Observable将发射出列表中的每一个元素,我们可以通过订阅它们来对这些发出的元素做出响应。
为了实现和第一个例子同样的结果,我们在每一个onNext()函数更新我们的适配器,添加元素并通知插入。
我们将复用和第一个例子同样的结构。主要的不同的是我们不再检索已安装的应用列表。列表由外部实体提供:
1
mApps = ApplicationsList.getInstance().getList();
Copied!
获得列表后,我们仅需将它响应化并填充RecyclerView的item:
1
private void loadList(List<AppInfo> apps) {
2
mRecyclerView.setVisibility(View.VISIBLE);
3
Observable.from(apps)
4
.subscribe(new Observer<AppInfo>() {
5
6
@Override
7
public void onCompleted() {
8
mSwipeRefreshLayout.setRefreshing(false);
9
Toast.makeText(getActivity(), "Here is the list!", Toast.LENGTH_LONG).show();
10
}
11
12
@Override
13
public void onError(Throwable e) {
14
Toast.makeText(getActivity(), "Something went wrong!", Toast.LENGTH_SHORT).show();
15
mSwipeRefreshLayout.setRefreshing(false);
16
}
17
18
@Override
19
public void onNext(AppInfo appInfo) {
20
mAddedApps.add(appInfo);
21
mAdapter.addApplication(mAddedApps.size() - 1,appInfo);
22
}
23
});
24
}
Copied!
正如你看到的,我们将已安装的应用程序列表作为参数传进from()函数,然后我们订阅生成的Observable。观察者和我们第一个例子中的观察者十分相像。一个主要的不同是我们在onCompleted()函数中停掉进度条是因为我们一个一个的发射元素;第一个例子中的Observable发射的是整个list,因此在onNext()函数中停掉进度条的做法是安全的。
Copy link