我最近开始使用MotionLayout来滚动一些顶部栏,但似乎存在一个问题,导致RecyclerView无法显示更新后的数据。我目前正在使用ConstraintLayout的2.0.0-alpha3版本。在视图中,我有工具栏和2个作为过滤器的选项卡,假设是filterX和filterY,它们会传递一些Rx内容,基本上只是基于type过滤项目列表,这不重要,因为数据已正确过滤,线程也正确,每次将数据传递给Adapter,但当我将MotionLayout向上或向下滚动时,有时更改不会反映在RecyclerView中,它们会在我稍微滚动一下甚至触摸后重新加载,在标准的ConstraitLayout情况下不会发生这种情况。请问是否有人遇到过这种情况并知道任何解决方案?
编辑:配有MotionLayout的布局:
编辑:配有MotionLayout的布局:
<androidx.constraintlayout.motion.widget.MotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutDescription="@xml/scene_month">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navigationIcon="@drawable/ic_back"/>
<TextView
android:id="@+id/title"
style="@style/ActivityTitle"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar" />
<com.example.FilterView
android:id='@+id/filter_view'
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/title"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler"
android:layout_width="0dp"
android:layout_height="0dp"
android:clipToPadding="false"
android:paddingBottom="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/filter_view" />
</androidx.constraintlayout.motion.widget.MotionLayout>
运动场景
<?xml version="1.0" encoding="utf-8"?>
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<Transition
app:constraintSetEnd="@id/end"
app:constraintSetStart="@id/start">
<OnSwipe
app:dragDirection="dragUp"
app:touchAnchorId="@id/recycler"
app:touchAnchorSide="top" />
</Transition>
<ConstraintSet android:id="@+id/start">
<Constraint android:id="@id/title"
android:text="@string/title"
android:layout_width="match_parent"
android:layout_height="48dp"
android:gravity="center_vertical"
android:textSize="28sp"
android:textColor="@color/dark_gray"
android:fontFamily="@font/rubik_medium"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar">
<CustomAttribute
app:attributeName="textSize"
app:customFloatValue="28"/>
</Constraint>
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Constraint android:id="@id/title"
android:text="@string/title"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
android:gravity="center_vertical"
android:minHeight="?actionBarSize"
android:textSize="28sp"
android:textColor="@color/dark_gray"
android:fontFamily="@font/rubik_regular"
android:layout_marginStart="72dp"
android:layout_marginEnd="16dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<CustomAttribute
app:attributeName="textSize"
app:customFloatValue="20"/>
</Constraint>
</ConstraintSet>
</MotionScene>
constraintlayout:2.0.0-alpha4
中遇到了相同的问题。当我执行notifyDatasetChanged
时,数据没有得到更新。只有在滚动时才会更新。 - Javier Delgadoalpha5
修复了所有问题,但是我刚刚进行了一个快速测试,所以可能会有一些失败的情况。 - user2141889