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