首页 > 解决方案 > 在第 3 页滚动到 recyclerview 末尾的正确方法是什么

问题描述

有一种情况,我必须将 recyclerview 滚动到最后一个位置。问题从我使用 Paging 3 的地方开始。我不知道每次向适配器提交数据时的正确方法是什么。顺便说一句,我不会一次提交数据,但是例如每次用户向后端提交新评论时,我都必须从服务器获取新列表并提交。
这是我尝试过的。这就是我观察数据的方式:

private fun observeComments() {
        exploreViewModel.commentsLiveData.observe(viewLifecycleOwner) { comments ->
            commentsAdapter.submitData(viewLifecycleOwner.lifecycle, comments)
        }
    }

这就是我尝试将 recyclreview 滚动到最后一项的方式:

commentsAdapter.addLoadStateListener { loadStates ->
            if(loadStates.refresh.endOfPaginationReached){
                if(commentsAdapter.itemCount>1)
                    binding.rvComments.smoothScrollToPosition(commentsAdapter.itemCount-1)
            }
        }

我也设置app:stackFromEnd="true"为 recyclerview 但这没有用。每当我提交新评论并获得列表时,recyclerview 会滚动到中间,我认为它会滚动到第一页结束。但我希望它滚动到列表的末尾。
任何帮助或建议将不胜感激。

标签: androidandroid-recyclerviewandroid-jetpackandroid-pagingandroid-paging-library

解决方案


您可以实现PagingSource.getRefreshKey()控制.load()失效后传递给的密钥,并设置initialKeyPager()控制传递给初始调用的密钥.load()

由于您的列表是分页的,滚动到末尾不起作用,因为您需要按顺序加载所有页面,直到到达您想要的位置,因此更好的策略是从您希望用户滚动位置开始的位置开始加载,然后让分页在页面向上滚动时预先添加。


推荐阅读