我想为以下内容实施MVP模式:
我的视图是显示列表的列表片段
我的模型是要显示在来自网络呼叫的列表中的数据
我的控制器是在视图和模型之间传递数据的控制器
我的流程是:
1)我做了一个网络请求并得到了我显示~20个项目的回复。每个项目都有一个项目的URL列表(~70)
2)点击一个项目,我进入一个循环并传递给一个排球队列请求每个这些URL(所以基本上)~70个排球请求一个接一个地提交。当我得到每个响应时,我更新了我的适配器。
问题:
如何转换(2)以便我使用MVP并通过某种回调机制更新视图?我认为回复每个回复都不是一个好主意,并且会召唤onNotifyDataSetChanged()
70次
这是什么最好的做法?
更多背景
我有一个应用程序,它由2个列表片段和1个带有布局视图的简单片段组成
第一个列表片段显示约20个项目的列表
单击时,每个项目都会产生一个网络调用,该服务从服务器带来~70个项目(最大),显示在第二个列表片段的另一个列表中。
一旦用户点击列表项,就会从网络中获取特定于该项的数据并显示在最后一个片段中
所以基本上第一个列表就是#34;破坏"到数据。但是第二个清单中的项目不超过70个。
设计:
我已经使用排球队列进行网络呼叫和功能 - 它工作正常,我显示我需要的数据
我已经为截击请求添加了一个监听器,并且从我的监听器中我更新了我的适配器
好处是,作为响应,我通过通知我的适配器来显示它们,因此用户在看到数据之前不必等待所有70个请求完成。
问题:
由于当我移动到第二个片段时点击第一个片段,我开始这些后端调用,当我转到第三个时,这些调用排队(我可以在日志中看到它),如果我转到第三个片段如果我回到第一个,其余项目的召唤将继续被解雇
由于我在适配器中获得来自Volley的这些请求的响应,并且实际片段可能不是相关的"我怎么能更好地设计呢?
我想某种模型视图模式,但在我的情况下,我不想等待所有网络调用完成从我的模型中获取数据(最好)
答案 0 :(得分:0)
您可以使用与现在相同的设计,只需在为一个片段发出的请求中添加标签:
request.setTag("fragX");
然后当您隐藏/删除片段时,您可以执行以下操作:
getRequestQueue().cancelAll("fragX");
这将阻止您从已入队的人那里收到“fragX”回复。
您还可以提交您收到的回复并进一步使用RxJava以便您可以使用流,除了过滤之外,还可以对响应执行各种其他方便的操作。
我使用jus作为Volley的分支开始但现在支持许多选项,包括RxJava。您也可以使用示例和齐射迁移样本。