繁体   English   中英

实施MVP,将数据从网络传递到列表视图

[英]Implement MVP for passing data from network to listviews

我想为以下实现MVP模式:
我的看法是显示列表的列表片段。
我的模型是要显示在网络呼叫列表中的数据。
我的控制器是在视图和模型之间传递数据的控制器。
我的流程是:
1)我提出了一个网络请求,并获得了显示约20个项目的响应。 每个项目都有一个项目URL列表(〜70)。
2)单击某个项目后,我进入一个循环,并向排球队列发送这些URL中的每个URL的请求(实际上是)〜70个排球请求,一个接一个地提交。 当我收到每个响应时,都会更新适配器。

题:
如何转换(2),以便使用MVP并通过某种回调机制更新视图? 我认为对每个响应进行回调并调用onNotifyDataSetChanged() 70次不是一个好主意
最佳做法是什么?

更多内容

我有一个由2个列表片段和1个带有布局视图的简单片段组成的应用程序。
第一个列表片段显示了约20个项目的列表。
单击每个项目都会导致网络调用,该网络调用从服务器带来了大约70个项目(最多),这些项目显示在第二个列表片段的另一个列表中。
用户单击列表项后,将从网络中获取特定于该项的数据并显示在最后一个片段中。
因此,基本上,第一个列表被“分解”为数据。 但是第二个列表中的项目不超过〜70。

设计:
我已经将凌空队列用于网络呼叫和功能方面,它可以正常工作,并且我可以正常显示数据。
我已将侦听器添加到截击请求中,并从侦听器中更新适配器。
好处是,随着响应的到来,我通过通知适配器显示它们,因此用户无需等待所有70个请求完成就可以看到数据。

问题:
由于以下事实:当我移至第二个片段时,在单击第一个片段时,我会启动这些后端调用,而在移至第三个片段时,这些调用将排队(我可以在日志中看到),如果我移至第三个片段其余项目的呼叫将继续进行,如果我回到第一个,则保持不变。
由于我从适配器内的Volley获得了对这些请求的响应,而实际的片段可能不再是“相关的”,我该如何设计更好的呢?
我猜想有某种模型视图模式,但就我而言,我不想等待所有网络调用完成以从模型中获取数据(最好)

您可以使用与现在相同的设计,只需在对一个片段的请求中添加标签:

request.setTag("fragX");

然后,当您隐藏/删除片段时,您可以执行以下操作:

getRequestQueue().cancelAll("fragX");

这将防止您从排队后就收到“ fragX”响应。

您还可以过滤收到的响应,甚至进一步使用RxJava,这样您就可以处理流,并且除了过滤之外,还可以对响应执行各种其他方便的操作。

我使用的是jus ,它最初是Volley的分支,但现在支持许多选项,包括RxJava。 您也可以在此处找到示例和凌空迁移示例。

暂无
暂无

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

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