如何将项目添加到分页列表
how to add item to paged list
现在我在聊天片段中使用 google 分页库
这是我的数据源中 initial 中的代码:
Disposable disposable = apiWrapper.getMessages(1, userId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(messagesPagingResponse -> {
if (messagesPagingResponse.getData() != null && messagesPagingResponse.getData().getData() != null) {
callback.onResult(messagesPagingResponse.getData().getData(), null, messagesPagingResponse.getData().getNextPage());
}
}
, throwable -> {
Log.e("throwable", throwable.getLocalizedMessage());
});
compositeDisposable.add(disposable);
在聊天片段中,我观察了列表
viewModel.getLiveMessages().observe(this, this::setChatList);
private void setChatList(PagedList<Message> messages) {
this.messages = messages;
ChatPagingAdapter chatPagingAdapter = (ChatPagingAdapter) binding.messagesRecyclerView.getAdapter();
if (chatPagingAdapter != null){
chatPagingAdapter.submitList(this.messages);
}
}
在我尝试将新消息添加到分页列表之前,它一直运行良好,所以它向我显示此错误
E/error: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | java.lang.UnsupportedOperationException
当我收到新消息时,我尝试将其添加为
messages.add(0, message);
Paging 库目前不允许您向 PagedAdapter 添加项目,就像对普通 RecyclerView 所做的那样。所有更新必须来自数据源。
在与您类似的情况下,我所做的是使用 Room 保留所有聊天消息,并使用 Dao
(数据访问对象)。每当有新消息时,您所要做的就是保留该消息,然后 room 将更新发送到您的 PagedList
Livedata
,您的 Chats RecyclerView 也会相应更新。
如果您不熟悉 Room,可以从 offical documentation
阅读更多内容
现在我在聊天片段中使用 google 分页库
这是我的数据源中 initial 中的代码:
Disposable disposable = apiWrapper.getMessages(1, userId)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(messagesPagingResponse -> {
if (messagesPagingResponse.getData() != null && messagesPagingResponse.getData().getData() != null) {
callback.onResult(messagesPagingResponse.getData().getData(), null, messagesPagingResponse.getData().getNextPage());
}
}
, throwable -> {
Log.e("throwable", throwable.getLocalizedMessage());
});
compositeDisposable.add(disposable);
在聊天片段中,我观察了列表
viewModel.getLiveMessages().observe(this, this::setChatList);
private void setChatList(PagedList<Message> messages) {
this.messages = messages;
ChatPagingAdapter chatPagingAdapter = (ChatPagingAdapter) binding.messagesRecyclerView.getAdapter();
if (chatPagingAdapter != null){
chatPagingAdapter.submitList(this.messages);
}
}
在我尝试将新消息添加到分页列表之前,它一直运行良好,所以它向我显示此错误
E/error: The exception could not be delivered to the consumer because it has already canceled/disposed the flow or the exception has nowhere to go to begin with. Further reading: https://github.com/ReactiveX/RxJava/wiki/What's-different-in-2.0#error-handling | java.lang.UnsupportedOperationException
当我收到新消息时,我尝试将其添加为
messages.add(0, message);
Paging 库目前不允许您向 PagedAdapter 添加项目,就像对普通 RecyclerView 所做的那样。所有更新必须来自数据源。
在与您类似的情况下,我所做的是使用 Room 保留所有聊天消息,并使用 Dao
(数据访问对象)。每当有新消息时,您所要做的就是保留该消息,然后 room 将更新发送到您的 PagedList
Livedata
,您的 Chats RecyclerView 也会相应更新。
如果您不熟悉 Room,可以从 offical documentation
阅读更多内容