是有效的Mvp模式实现(使用rxandroid和retrofit)

时间:2016-03-07 04:13:15

标签: android design-patterns rx-java mvp

我想在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

1 个答案:

答案 0 :(得分:1)

我会创建这些组件:

  • ItemsViewItemsPresenter用于显示商品列表。
  • DetailsViewDetailsPresenter用于显示商品详情。
  • NavigationHelper用于管理导航(例如,打开新片段)

Flow将如下所示:

  1. ItemsPresenter.loadData()使用rxJava加载数据并进行改造。
  2. ItemsPresenter来电ItemsView.showItems(List<Items> list)(你内心会有(adapter.setContent(list)
  3. ItemsPresenter来电NavigationHelper.showDetails(Item selectedItem)NavigationHelper的行为应根据手机/平板电脑的不同而有所不同。
  4. 对于手机和平板电脑,

    ItemsPresenter的行为可能会有所不同。对于手机,仅当用户从列表中选择项目时,它才会调用NavigationHelper.showDetails。对于表格,它在加载数据时也会为第一个项目调用NavigationHelper.showDetails。我建议通过演示者的构造函数传递有关电话/表格的知识。

    例如ItemsPresenter - &gt; ItemsViewPresenterView implementation