【发布时间】:2016-09-30 14:08:23
【问题描述】:
在 MVP 中使用回收器视图时,你们在哪里保留对列表的引用?我有一个ChatManager,可以与不同的演示者交谈。我保留了两份消息列表,一份在ChatManager,另一份在Presenter。适配器、视图和演示者共享同一个列表。
我之所以引用 Presenter 中的消息列表,是因为我有一些要从演示者那里处理的删除和滚动业务逻辑。
所以现在当我必须删除一条消息时,演示者决定要删除的项目并将其从列表中删除。现在它需要让视图知道一条消息已被删除。那么在这种情况下,应该说view.remove(message) 还是view.remove(index)?视图不应再次尝试删除消息,因为演示者已经这样做了。
滚动或添加等其他操作也是如此。如果收到新消息,演示者会将newMessages 添加到allMessages,然后必须更新视图。理想情况下,演示者应该调用view.onMessagesReceived(List<Message> messages) 而不是view.onMessageReceived(int newMessagesCount, int indexAddedAt)。第二种方法真的很奇怪,一点也不冗长。但是由于列表是共享的,视图只需要调用notifyItemInserted,因此只需要知道计数和索引。
处理这个问题的最佳方法是什么?
【问题讨论】:
-
我是这样做的:我将数据列表存储在演示者中,无需复制即可查看。当演示者(来自模型)发生变化时,我可以调用
view.changeData(),您的活动/片段可以通过presenter.getData()访问数据。与视图相关的操作具有与演示者相关的方法(添加新消息,加载更多......) -
@akshayt23 第一次设置数据列表 view.onMessagesReceived(List
messages) 在任何更改(添加、编辑、删除)影响后的选项流如 notifyItemInserted(int lastPostion) Edit NotifyItemChanged(int position ) 通过唯一 ID 从消息中获取位置删除也相同
标签: android architecture android-recyclerview mvp