我在Android上有一个简单的聊天应用程序,其中一个是聊天屏幕,加载后的初始聊天消息看起来像循环视图充满了转换并保持在底部的滚动位置。
现在我有一个新的消息(或者我发布/来自对手用户),滚动到最后一条消息,这是好的。
现在我在上面滚动查看历史转换来阅读过去的消息,在阅读时,我从对手用户那里收到了一条新的2-3条消息,我的滚动视图向下弹了起来,而不是保持滚动位置。
看看我附上的截图
在插入新消息之后,我将更新适配器,如下所示
private fun notifyAdapter() {
try {
val recyclerViewState = rvGroupChatMessages.layoutManager?.onSaveInstanceState()
messageAdapter.notifyDataSetChanged()
rvGroupChatMessages.layoutManager?.onRestoreInstanceState(recyclerViewState)
} catch (e: Exception) {
e.printStackTrace()
}
}
发布于 2021-03-20 15:30:59
我建议您使用DiffUtil,并尝试使用下面的示例代码。
recyclerView.post { recyclerView.scrollToPosition(messageAdapter.itemCount - 1) }
发布于 2021-04-08 14:56:05
<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" />
试试这个:
android:descendantFocusability="blocksDescendants"
如果您使用的是ConstraintLayout,请确保RecyclerView高度为0dp
https://stackoverflow.com/questions/66718914
复制相似问题