首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在安卓系统底部添加新行时的RecycleView滚动问题

在安卓系统底部添加新行时的RecycleView滚动问题
EN

Stack Overflow用户
提问于 2021-03-20 14:39:35
回答 2查看 58关注 0票数 0

我在Android上有一个简单的聊天应用程序,其中一个是聊天屏幕,加载后的初始聊天消息看起来像循环视图充满了转换并保持在底部的滚动位置。

现在我有一个新的消息(或者我发布/来自对手用户),滚动到最后一条消息,这是好的。

现在我在上面滚动查看历史转换来阅读过去的消息,在阅读时,我从对手用户那里收到了一条新的2-3条消息,我的滚动视图向下弹了起来,而不是保持滚动位置。

看看我附上的截图

在插入新消息之后,我将更新适配器,如下所示

代码语言:javascript
运行
复制
    private fun notifyAdapter() {
            try {
                val recyclerViewState = rvGroupChatMessages.layoutManager?.onSaveInstanceState()
                messageAdapter.notifyDataSetChanged()
                rvGroupChatMessages.layoutManager?.onRestoreInstanceState(recyclerViewState)
            } catch (e: Exception) {
                e.printStackTrace()
            }
    
        }

EN

回答 2

Stack Overflow用户

发布于 2021-03-20 15:30:59

我建议您使用DiffUtil,并尝试使用下面的示例代码。

代码语言:javascript
运行
复制
recyclerView.post { recyclerView.scrollToPosition(messageAdapter.itemCount - 1) }
票数 0
EN

Stack Overflow用户

发布于 2021-04-08 14:56:05

代码语言:javascript
运行
复制
<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/rvGroupChatMessages"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:scrollbars="vertical"
    android:fitsSystemWindows="true"
    android:descendantFocusability="blocksDescendants"
    app:layout_constraintBottom_toBottomOf="@+id/cvBottomLayout"
    app:layout_constraintBottom_toTopOf="@id/cvBottomLayout"
    app:layout_constraintTop_toTopOf="parent" />

试试这个:

代码语言:javascript
运行
复制
android:descendantFocusability="blocksDescendants"

如果您使用的是ConstraintLayout,请确保RecyclerView高度为0dp

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66718914

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档