RecyclerView使用reverseLayout后,在notifyDataSetChanged时会出现“跳动”的情况

4

我这样设置了recyclerView的layoutManager:

recyclerView.layoutManager = LinearLayoutManager(context, HORIZONTAL, true)

最后一个参数设置了reverseLayouttrue,这意味着它将从右到左加载。我需要这个功能,因为我实现了一种日历排序方式,其中最后一个日期是当前日期,但您可以无限地向过去滚动。

问题在于,当我在适配器中调用notifyItemChangednotifyDataSetChanged时,列表会向右滚动几个像素。这在reverseLayout=false时不会发生。

只有当RecyclerView的大小为MATCH_PARENT时才会出现此问题,当我手动设置其大小为任何dp时,问题就消失了。

有什么想法并且如何应对?


1
目前我只是手动设置了recyclerView的大小,这样可以解决问题,但最好能够正确地修复它。 - Michał Klimczak
2个回答

2
也许已经有点晚了,但是无论如何,我还是留下这个答案。 对于我的问题,使用具有匹配约束的约束布局(水平约束为0dp)来使用recyclerview解决了我的问题。

0dp 对我不起作用。MATCH_PARENT 实际上可以解决问题,但我想要它在两个 WRAP_CONTENT 视图之间,所以不能使用它。 - Chirag Kalra

0

以编程方式设置RecyclerView的尺寸对我很有帮助。

在Kotlin中 -

constraintLayout.doOnLayout {
    recyclerview.layoutParams.height = bottomLayout.top - appBarLayout.bottom
}

xml -

<androidx.recyclerview.widget.RecyclerView
    android:id="@+id/recyclerView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintBottom_toTopOf="@id/bottomLayout" />

我想要在底部布局和应用栏布局之间放置recyclerView,而constraintLayout是根布局。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接