RecycleView +Editview 键盘弹起,无法将RecycleView 顶起

209 阅读1分钟

我们在创建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)