是有效的 Mvp 模式实现(使用 rxandroid 和 retrofit)
is valid Mvp pattern implementation (with rxandroid and retrofit)
我想使用 mvp 存储库中的 rxandroid 从远程服务器获取数据。然后,用数据设置网格适配器(在 Fragment 中),并为 tablet ui(在 Activity 中)替换另一个片段。
如果我使用回调侦听器,我至少需要 2 个回调,以通知 async(rxjava) 完成片段并使用数据集中的第一条记录启动片段。
除了回调之外,还有其他方法可以解决这个问题吗??
其实我什至不确定我是否正确使用了 rxjava。
现在我将 observable 传回 fragment 以设置适配器并从返回的数据启动新的 fragment。
public <T> Observable.Transformer<T, T> applySchedulers() {
return observable -> observable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
@Override
public Observable<MovieDataContainer> getMovieByFilter(String sortBy, String apiKey, int number) {
MovieApiService movieApiService= retrofit.createService(MovieApiService.class);
return movieApiService
.getMovieList(sortBy,apiKey,number)
.compose(applySchedulers());
}
如果我的方法不正确,请告诉我。如果您有此案例的样品,将不胜感激
以防万一这是我的git repo
我会创建这些组件:
ItemsView
和 ItemsPresenter
用于显示项目列表。
DetailsView
和 DetailsPresenter
用于显示项目详细信息。
NavigationHelper
用于管理导航(例如打开新片段)
流程将如下所示:
ItemsPresenter.loadData()
使用 rxJava 和改造加载数据。
ItemsPresenter
调用 ItemsView.showItems(List<Items> list)
(在里面你会有类似 (adapter.setContent(list)
)
ItemsPresenter
呼叫 NavigationHelper.showDetails(Item selectedItem)
。 NavigationHelper
应该根据 phone/tablet. 表现不同
ItemsPresenter
对于 phone 和 tablet 的行为可能不同。对于 phone,它仅在用户从列表中选择项目时调用 NavigationHelper.showDetails
。对于 table,它在加载数据时也会为第一项调用 NavigationHelper.showDetails
。我建议通过演示者的构造函数传递有关 phone/table 的知识。
例如 ItemsPresenter
-> ItemsView
流程见 Presenter and View implementation
我想使用 mvp 存储库中的 rxandroid 从远程服务器获取数据。然后,用数据设置网格适配器(在 Fragment 中),并为 tablet ui(在 Activity 中)替换另一个片段。
如果我使用回调侦听器,我至少需要 2 个回调,以通知 async(rxjava) 完成片段并使用数据集中的第一条记录启动片段。
除了回调之外,还有其他方法可以解决这个问题吗??
其实我什至不确定我是否正确使用了 rxjava。
现在我将 observable 传回 fragment 以设置适配器并从返回的数据启动新的 fragment。
public <T> Observable.Transformer<T, T> applySchedulers() {
return observable -> observable
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
@Override
public Observable<MovieDataContainer> getMovieByFilter(String sortBy, String apiKey, int number) {
MovieApiService movieApiService= retrofit.createService(MovieApiService.class);
return movieApiService
.getMovieList(sortBy,apiKey,number)
.compose(applySchedulers());
}
如果我的方法不正确,请告诉我。如果您有此案例的样品,将不胜感激
以防万一这是我的git repo
我会创建这些组件:
ItemsView
和ItemsPresenter
用于显示项目列表。DetailsView
和DetailsPresenter
用于显示项目详细信息。NavigationHelper
用于管理导航(例如打开新片段)
流程将如下所示:
ItemsPresenter.loadData()
使用 rxJava 和改造加载数据。ItemsPresenter
调用ItemsView.showItems(List<Items> list)
(在里面你会有类似 (adapter.setContent(list)
)ItemsPresenter
呼叫NavigationHelper.showDetails(Item selectedItem)
。NavigationHelper
应该根据 phone/tablet. 表现不同
ItemsPresenter
对于 phone 和 tablet 的行为可能不同。对于 phone,它仅在用户从列表中选择项目时调用 NavigationHelper.showDetails
。对于 table,它在加载数据时也会为第一项调用 NavigationHelper.showDetails
。我建议通过演示者的构造函数传递有关 phone/table 的知识。
例如 ItemsPresenter
-> ItemsView
流程见 Presenter and View implementation