[英]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
如果您有这种情况的样本,将不胜感激
I would create these components: 我将创建以下组件:
ItemsView
and ItemsPresenter
for displaying items list. ItemsView
和ItemsPresenter
用于显示项目列表。 DetailsView
and DetailsPresenter
for displaying item details. DetailsView
和DetailsPresenter
用于显示项目详细信息。 NavigationHelper
for managing navigation (eg. open new fragment) NavigationHelper
用于管理导航(例如,打开新片段) Flow will look like this: 流将如下所示:
ItemsPresenter.loadData()
loads data using rxJava and retrofit. ItemsPresenter.loadData()
使用rxJava和改造来加载数据。 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)
)的内容。 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
流的示例,请参阅Presenter和View实现
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.