Android PagedListAdapter:奇怪的运行时行为

Android PagedListAdapter:奇怪的运行时行为,android,android-adapter,Android,Android Adapter,我在一个专门用于聊天的片段中使用PageListAdapter(就像在任何现代消息传递应用程序中一样)。我最初只使用RecyclerView,但它非常紧张。之后,我进一步搜索,发现PagedListAdapter,但是,它有其独特的局限性和缺陷。这是一种更为紧张和怪异的滚动行为。每当在使用RxJava Flowable加载的数据库中更改数据时,大多数视图都会重新创建,因为RecyclerView中的所有消息/视图开始闪烁,滚动位置会自动更改并滚动到中间的某个位置 因此,基本上我有以下问题: 如何

我在一个专门用于聊天的片段中使用PageListAdapter(就像在任何现代消息传递应用程序中一样)。我最初只使用RecyclerView,但它非常紧张。之后,我进一步搜索,发现PagedListAdapter,但是,它有其独特的局限性和缺陷。这是一种更为紧张和怪异的滚动行为。每当在使用RxJava Flowable加载的数据库中更改数据时,大多数视图都会重新创建,因为RecyclerView中的所有消息/视图开始闪烁,滚动位置会自动更改并滚动到中间的某个位置

因此,基本上我有以下问题:

如何使用PagedListAdapter的最后一页启动视图?
如何防止PagedListAdapter自动滚动?

MotionLayout
中使用
RecyclerView
时,我遇到了类似的问题(来自beta3/beta4)。 我使用了
MotionLayout
来实现一个可滑动的覆盖(在纵向模式下从底部,在水平模式下从左侧)。 在水平模式下,更新RecyclerView工作正常,因为在水平模式下,覆盖占据了整个屏幕,RecyclerView也是如此。 但在纵向模式下,我只需要将覆盖刷到屏幕的一半,因此,
RecyclerView
不是全屏

在这种情况下,更新
RecyclerView
时,整个视图的大小都在改变,从而创建了一个跳跃列表(插入新的聊天信息时,列表将跳转到另一个位置)

仍然没有弄清楚确切的原因,我也不能确认这是因为MotionLayout,但它是主要的嫌疑犯

我的解决方案是固定高度,这样列表在更新时不会改变大小。我已经重写了
LayoutManager
getHeight
函数,并在片段的
onViewCreated()
中设置了一个固定大小。 此外,如果键盘出现,您需要保留此布局侦听器以更改大小

requireView().viewTreeObserver.addOnGlobalLayoutListener {
            if (initialHeight != view.height) {
                initialHeight = view.height
                chatLayoutManager.requestLayout()
            }
        }
chatLayoutManager = object : LinearLayoutManager(requireContext(), VERTICAL, true) {
            override fun getHeight() = initialHeight
}

我也面临同样的问题。你能解决这个问题吗?