如何在项目插入 PagedListAdapter 后正确滚动
How to correctly scroll after item inserted into PagedListAdapter
我正在使用 Android Arch PagedListAdapter
class。我遇到的问题 运行 是因为我的应用程序是一个聊天风格的应用程序,所以我需要在插入项目时滚动到位置 0。但是 PagedListAdapter 找到了差异并在后台线程上调用了必要的方法,因此似乎没有可靠的方法来调用 layoutManager.scrollToPosition(0)
如果有人对我如何在正确的时间滚动有任何想法,将不胜感激。谢谢!
这是我的房道:
@Dao
abstract class MessagesDao {
@Query("SELECT ...")
abstract fun getConversation(threadId: String): DataSource.Factory<Int, Conversation>
}
然后是 LivePagedListBuilder:
LivePagedListBuilder(database.messagesDao.getConversation(threadId), PagedList.Config.Builder()
.setInitialLoadSizeHint(20)
.setPageSize(12)
.setEnablePlaceholders(true)
.build()).build()
事实证明,有一个名为 AdapterDataObsever 的漂亮东西可以让您观察 PagedListAdapter 项目调用。以下是我如何使用它来解决问题。
conversationAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
if (positionStart == 0) {
manager.scrollToPosition(0)
}
}
})
我正在使用 Android Arch PagedListAdapter
class。我遇到的问题 运行 是因为我的应用程序是一个聊天风格的应用程序,所以我需要在插入项目时滚动到位置 0。但是 PagedListAdapter 找到了差异并在后台线程上调用了必要的方法,因此似乎没有可靠的方法来调用 layoutManager.scrollToPosition(0)
如果有人对我如何在正确的时间滚动有任何想法,将不胜感激。谢谢!
这是我的房道:
@Dao
abstract class MessagesDao {
@Query("SELECT ...")
abstract fun getConversation(threadId: String): DataSource.Factory<Int, Conversation>
}
然后是 LivePagedListBuilder:
LivePagedListBuilder(database.messagesDao.getConversation(threadId), PagedList.Config.Builder()
.setInitialLoadSizeHint(20)
.setPageSize(12)
.setEnablePlaceholders(true)
.build()).build()
事实证明,有一个名为 AdapterDataObsever 的漂亮东西可以让您观察 PagedListAdapter 项目调用。以下是我如何使用它来解决问题。
conversationAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
if (positionStart == 0) {
manager.scrollToPosition(0)
}
}
})