【问题标题】:Wrong MotionLayout state in RecyclerViewRecyclerView 中的 MotionLayout 状态错误
【发布时间】:2023-03-23 19:23:01
【问题描述】:

我有包含 40 个项目的 RecyclerView。 Item 是一个 CardView,里面有 MotionLayout:

<androidx.cardview.widget.CardView 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:cardView="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/card_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="2dp"
    cardView:cardCornerRadius="4dp"
    cardView:cardElevation="2dp">

<androidx.constraintlayout.motion.widget.MotionLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/motion_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:layoutDescription="@xml/elements_catalog_item_scene">

    <ImageView
        android:id="@+id/element_icon"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:layout_margin="10dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:src="@drawable/ic_ca" />

    <TextView
        android:id="@+id/element_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="10dp"
        android:layout_marginTop="12dp"
        app:layout_constraintStart_toEndOf="@+id/element_icon"
        app:layout_constraintTop_toTopOf="@+id/element_icon"
        tools:text="element name" />

    <TextView
        android:id="@+id/element_description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:visibility="gone"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/element_icon"
        tools:text="element description"/>

</androidx.constraintlayout.motion.widget.MotionLayout>
</androidx.cardview.widget.CardView>

当用户点击任何项目时,它会展开,用户可以在元素名称下方看到元素描述。当用户点击展开的项目时,它会折叠。 问题是 - 然后第一项被展开,如果用户向下滚动列表,第 15 项也被展开。如果用户折叠第 15 个项目,第一个项目也将被折叠。它适用于所有项目 2 -> 16 -> 31。等 我知道,RecyclerView 重用视图, 我想我可以将状态存储在我的项目列表中并将其作为有效负载提供给 RecyclerView ViewHolder,但是我应该如何在 ViewHolder.bind() 中设置 MotionLayout 的正确状态?或者我可以只使用 RecyclerView 设置吗?

【问题讨论】:

    标签: android kotlin android-recyclerview android-motionlayout


    【解决方案1】:

    在 ViewHolder.bind() 中。 必须设置 MotionLayout 的 stat,因为 RecyclerView 正在回收布局。

    【讨论】:

      猜你喜欢
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      • 2016-05-17
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多