【问题标题】:How to correctly scroll after item inserted into PagedListAdapter如何在将项目插入 PagedListAdapter 后正确滚动
【发布时间】:2018-06-22 04:20:57
【问题描述】:

我正在使用 Android Arch PagedListAdapter 类。我遇到的问题是,由于我的应用程序是聊天风格的应用程序,因此在插入项目时我需要滚动到位置 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()

【问题讨论】:

  • 你能提供游览数据源的实现吗? PagedList 如何使用实时数据源?
  • @KeivanEsbati 我已经用该信息编辑了问题。我使用了房间数据库
  • @NickMowen 你是如何将 pagedList 反转为底部位置为 0 的?
  • @AlexAndro 是的,我做到了
  • @NickMowen 我相信你做到了。你能分享一下HOW你这样做了吗?

标签: android-paging


【解决方案1】:

事实证明,有一个漂亮的东西叫做 AdapterDataObsever,它可以让你观察 PagedListAdapter 项目的调用。以下是我如何使用它来解决问题。

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

【讨论】:

  • 这似乎对我不起作用。回调被调用,但 RecyclerView 不改变位置。知道是什么原因造成的吗?
  • @masterwok 如果您没有启用占位符并滚动到当前未加载的位置,它将不会滚动
  • 嗨@NickMowen 感谢您的反馈。最终为我工作的是我实现了所有 onItem 更改侦听器并启用了占位符。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多