如何在插入到PagedListAdapter中的项目后正确滚动

Nic*_*wen 12 android-paging

我正在使用Android Arch PagedListAdapter类.我遇到的问题是,由于我的应用程序是聊天风格的应用程序,我需要在插入项目时滚动到位置0.但是PagedListAdapter在后台线程上找到差异并调用必要的方法,所以似乎没有可靠的方法来调用layoutManager.scrollToPosition(0)

如果有人对我如何在合适的时间滚动有任何想法,我将不胜感激.谢谢!

这是我的房间道:

@Dao
abstract class MessagesDao {

    @Query("SELECT ...")
    abstract fun getConversation(threadId: String): DataSource.Factory<Int, Conversation>

}
Run Code Online (Sandbox Code Playgroud)

然后是LivePagedListBuilder:

LivePagedListBuilder(database.messagesDao.getConversation(threadId), PagedList.Config.Builder()
            .setInitialLoadSizeHint(20)
            .setPageSize(12)
            .setEnablePlaceholders(true)
            .build()).build()
Run Code Online (Sandbox Code Playgroud)

Nic*_*wen 27

事实证明,有一个名为AdapterDataObsever的美丽事物可以让你观察PagedListAdapter项目调用.以下是我如何使用它来解决问题.

conversationAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() {
        override fun onItemRangeInserted(positionStart: Int, itemCount: Int) {
            if (positionStart == 0) {
                manager.scrollToPosition(0)
            }
        }
    })
Run Code Online (Sandbox Code Playgroud)

  • @masterwok如果您没有启用占位符并滚动到当前未加载的位置,它将不会滚动 (2认同)