MVPでリサイクラビューを使用しているときに、リストの参照はどこで行いますか?私はChatManager
を持っており、それは異なるプレゼンターと話すことができます。私はChatManager
に1つ、Presenter
に2つのメッセージリストを保管しています。アダプター、ビュー、およびプレゼンターは同じリストを共有します。 Presenter
のメッセージのリストへの参照がある理由は、プレゼンターから処理したいスクロールと削除のためのビジネスロジックがあるからです。MVPを使用してRecyclerViewからアイテムを挿入/削除する方法
メッセージを削除する必要があるとき、プレゼンターは削除するアイテムを決定し、リストから削除します。メッセージが削除されたことをビューに伝える必要があります。その場合、view.remove(message)
またはview.remove(index)
と表示されますか?プレゼンターが既にそれを行っているので、ビューはメッセージを再試行してはいけません。
スクロールや追加など他の操作でも同じです。新しいメッセージが受信された場合、プレゼンターはをallMessages
に追加し、ビューを更新する必要があります。理想的には、プレゼンターはview.onMessageReceived(int newMessagesCount, int indexAddedAt)
の代わりにview.onMessagesReceived(List<Message> messages)
を呼び出す必要があります。 2番目の方法は本当に奇妙で、冗長ではありません。しかし、リストは共有されているので、ビューはnotifyItemInserted
を呼び出すだけでよく、したがってカウントとインデックスについて知る必要があります。
これを処理する最善の方法は何ですか?
私はそのようにやった:私は、プレゼンターのビューにコピーする必要がデータのリストを格納しません。 (モデルから)何かが変更されたとき、私は 'view.changeData()'を呼び出すことができ、あなたのアクティビティ/フラグメントは 'presenter.getData()'によってデータにアクセスできます。 (Add、Edit、Remove)のような変更を加えた後に、 –
@ akshayt23 @ akshayt23最初にデータリストview.onMessagesReceived(リストメッセージ)を設定することができます。 )オプションはnotifyItemInserted(int lastPostion)のように流れますEdit NotifyItemChanged(int position)一意のidでメッセージから位置を取得delete同じ –