我们在创建RecycleView的时候,都会创建LayoutManager 只需要修改LayoutManager一个配置,即可将RecycleView 整个顶起来
setStackFromEnd(true)
这样子的话,先添加的item会被顶上去,最新添加的item每次都会显示在最下面. 但是这样就会出现最开始添加的会从最下面开始,这样的布局我反正是忍受不了,所以这里使用第二种方式.
recyceView.addOnLayoutChangeListener { _, _, _, _, bottom, _, _, _, oldBottom ->
if (bottom < oldBottom) {
binding.rvMessageList.post {
if (mAdapter.itemCount > 0) {
binding.rvMessageList.scrollToPosition(mAdapter.itemCount - 1)
}
}
}
}
这里监听recycleView视图的变化,然后自动滚动到最后一页.但是同时这样也有一定的问题,那就是如果界面有Glide加载的图片布局的话,而且此时图片的尺寸一开始没有固定好尺寸的话,那么就会导致滚动到最后的距离不是真实的距离,因为后面图片加载出来了.所以这里还要加上一个处理方案,每次来新数据的时候,添加下面这部分代码,标识动态设置stackFromEnd参数
recycleView.postDelayed({
mLayoutManager.stackFromEnd =
mLayoutManager.findLastVisibleItemPosition() -
mLayoutManager.findFirstVisibleItemPosition() < mAdapter.itemCount - 1
}, 50)