是有效的 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

我会创建这些组件:

  • ItemsViewItemsPresenter 用于显示项目列表。
  • DetailsViewDetailsPresenter 用于显示项目详细信息。
  • NavigationHelper 用于管理导航(例如打开新片段)

流程将如下所示:

  1. ItemsPresenter.loadData() 使用 rxJava 和改造加载数据。
  2. ItemsPresenter 调用 ItemsView.showItems(List<Items> list)(在里面你会有类似 (adapter.setContent(list))
  3. ItemsPresenter 呼叫 NavigationHelper.showDetails(Item selectedItem)NavigationHelper 应该根据 phone/tablet.
  4. 表现不同

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

例如 ItemsPresenter -> ItemsView 流程见 Presenter and View implementation