RecyclerView прыгает при прокрутке элементов ComposeView переменной высоты

у меня естьна нем размещаются элементы, созданные с помощью Jetpack Compose. Высота предметов разная. При прокрутке сверху списка вниз прокрутка плавная. Однако при прокрутке вверх элементы в списке перескакивают, когда высота следующего элемента, который должен появиться в верхней части экрана, отличается от высоты элемента, который ранее находился в верхней части экрана.

Высота макета каждогоустановлен на. Предыдущие макеты XML плавно прокручивались в обоих направлениях.

Я использую Compose 1.2.0 и RecyclerView 1.3.0-beta01.

Есть ли решение для плавной прокрутки в обоих направлениях?

Обновление: я сообщил об ошибке здесь и предоставил пример проекта, демонстрирующий проблему здесь .

1 ответ

попробуй это. Предположим, что представлением элемента является ComposeView, сделайте это в onBindViewHolder:

composeView.getChildAt(0)?.requestLayout()

Это может исправить прыжки. Но это может оказать некоторое влияние на производительность. Сделайте свой собственный выбор.

вот мой item.xml.

      <?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
</data>
<androidx.compose.ui.platform.ComposeView
    android:id="@+id/composeItem"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
</layout>

и сделайте это в onBindViewHolder() адаптера:

      findView<ComposeView>(R.id.composeItem).apply {
 // avoid wrapContent jump
    getChildAt(0)?.requestLayout()
    setContent {
       // your own Composable method
        Content()
    }
}