2016-03-07 44 views
0

我想从远程服务器使用rxandroid在mvp存储库中获取数据。然后,使用数据设置网格适配器(在Fragment中),并替换tablet ui的另一个片段(在Activity中)。是有效的Mvp模式实现(与rxandroid和翻新)

如果我使用回调监听器,我需要至少2个回调,通知异步(rxjava)完成分段并启动数据集中第一条记录的片段。

除了回调之外,还有其他解决这个问题的方法吗?

其实我甚至不确定我是否正确使用rxjava。

现在为了设置适配器并从返回的数据中启动新的片段,我现在将可观测值传递回片段。

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

我会创建这些组件:用于显示项目列表

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

流程看起来就像这样:

  1. ItemsPresenter.loadData()使用rxJava和改造加载数据。
  2. ItemsPresenter电话ItemsView.showItems(List<Items> list)(里面,你会碰到这样的(adapter.setContent(list)
  3. ItemsPresenter电话NavigationHelper.showDetails(Item selectedItem)NavigationHelper应该表现不同,这取决于手机/平板电脑。

ItemsPresenter可以表现不同的手机和平板电脑。对于打电话给NavigationHelper.showDetails只有当用户从列表中选择一个项目时,它会调用NavigationHelper.showDetails也是第一个项目,当数据被加载的时候,我建议通过演示者的构造函数传递关于电话/表格的知识

。例如ItemsPresenter - >ItemsView流看PresenterView implementation

+0

谢谢!但正如我问我不知道什么是在rxjava回调中返回数据的好方法。我需要2级回调将数据传回主活动来启动片段(我相信在片段中启动新片段是不好的做法)并且我相信演示者不应该有活动(上下文),那么您如何设置适配器(我的网格适配器扩展了arrayAdapter )? – user3882878

+0

请看看提供的示例。你不需要任何回调。 'View'实现接口,'Presenter'使用这个接口直接调用'view'。 “演示者”不应该依赖于“上下文”。相反,它依赖于'NavigationHelper',它也是与'showDetails'方法的接口。例如,你的活动可以实现'NavigationHelper'接口。 – MyDogTom

+0

Isnt接口回调?为了在接口中调用函数,我需要强制转换为上下文..我怎样才能在无法访问上下文的演示者中做到这一点 – user3882878