简体   繁体   English

是有效的Mvp模式实施(带有rxandroid和改造)

[英]is valid Mvp pattern implementation (with rxandroid and retrofit)

I want to get data from remote server using rxandroid in mvp repository. 我想使用mvp存储库中的rxandroid从远程服务器获取数据。 Then,set up grid adapter with data(in Fragment), and replace another fragment for tablet ui(in Activity). 然后,使用数据(在“片段”中)设置网格适配器,并为平板电脑ui(在“活动”中)替换另一个片段。

If I use callback listener I need at least 2 callbacks, which to notify async(rxjava) is done to fragment and launch fragment with first record from data set. 如果我使用回调侦听器,则至少需要2个回调,以通知async(rxjava)完成以数据集中的第一条记录为片段并启动片段。

Is there alternative way to solve this problem other than callback ?? 除了回调之外,还有其他解决此问题的方法吗?

Actually I am not even sure if I am using rxjava properly. 实际上,我什至不确定我是否正确使用了rxjava。

For now I pass observable back to fragment in order to set adapter and launch new fragment from that returned data. 现在,我将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());
}

If I am not doing correct way please let me know. 如果我没有采取正确的方法,请告诉我。 If you have sample for this case, it will be grateful 如果您有这种情况的样本,将不胜感激

Just in case here is my git repo 万一这是我的git仓库

I would create these components: 我将创建以下组件:

  • ItemsView and ItemsPresenter for displaying items list. ItemsViewItemsPresenter用于显示项目列表。
  • DetailsView and DetailsPresenter for displaying item details. DetailsViewDetailsPresenter用于显示项目详细信息。
  • NavigationHelper for managing navigation (eg. open new fragment) NavigationHelper用于管理导航(例如,打开新片段)

Flow will look like this: 流将如下所示:

  1. ItemsPresenter.loadData() loads data using rxJava and retrofit. ItemsPresenter.loadData()使用rxJava和改造来加载数据。
  2. ItemsPresenter calls ItemsView.showItems(List<Items> list) (inside you will have something like ( adapter.setContent(list) ) ItemsPresenter调用ItemsView.showItems(List<Items> list) (在内部,您将看到类似( adapter.setContent(list) )的内容。
  3. ItemsPresenter calls NavigationHelper.showDetails(Item selectedItem) . ItemsPresenter调用NavigationHelper.showDetails(Item selectedItem) NavigationHelper should behave differently depending on phone/tablet. NavigationHelper行为应取决于手机/平板电脑。

ItemsPresenter could behave differently for phone and for tablet. ItemsPresenter在手机和平​​板电脑上的行为可能有所不同。 For phone it calls NavigationHelper.showDetails only when user selects item from a list. 对于电话,仅当用户从列表中选择项目时,它才调用NavigationHelper.showDetails For table it calls NavigationHelper.showDetails also for a first item when data is loaded. 对于表,在加载数据时,它还会为第一项调用NavigationHelper.showDetails I suggest to pass knowledge about phone/table via presenter's constructor. 我建议通过演示者的构造函数传递有关电话/桌子的知识。

For example of ItemsPresenter -> ItemsView flow see Presenter and View implementation 有关ItemsPresenter > ItemsView流的示例,请参阅PresenterView实现

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM