我想在mvp存储库中使用rxandroid从远程服务器获取数据。然后,使用数据设置网格适配器(在片段中),并替换平板电脑ui的另一个片段(在“活动”中)。
如果我使用回调侦听器,我需要至少2个回调,通知async(rxjava)完成片段并使用数据集中的第一个记录启动片段。
除了回调之外,还有替代方法来解决这个问题吗?
实际上我甚至不确定我是否正确使用rxjava。
现在我将observable传递回片段,以便设置适配器并从返回的数据中启动新片段。
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
答案 0 :(得分:1)
我会创建这些组件:
ItemsView
和ItemsPresenter
用于显示商品列表。DetailsView
和DetailsPresenter
用于显示商品详情。NavigationHelper
用于管理导航(例如,打开新片段)Flow将如下所示:
ItemsPresenter.loadData()
使用rxJava加载数据并进行改造。ItemsPresenter
来电ItemsView.showItems(List<Items> list)
(你内心会有(adapter.setContent(list)
)ItemsPresenter
来电NavigationHelper.showDetails(Item selectedItem)
。 NavigationHelper
的行为应根据手机/平板电脑的不同而有所不同。 ItemsPresenter
的行为可能会有所不同。对于手机,仅当用户从列表中选择项目时,它才会调用NavigationHelper.showDetails
。对于表格,它在加载数据时也会为第一个项目调用NavigationHelper.showDetails
。我建议通过演示者的构造函数传递有关电话/表格的知识。
例如ItemsPresenter
- &gt; ItemsView
流Presenter和View implementation