【发布时间】: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