essayez d'utiliser MotionLayout avec RecyclerView ,
lors du défilement vers le haut, l'application plante avec une erreur:
android.content.res.Resources $ NotFoundException: impossible de trouver ID de ressource # 0xffffffff
le code de mise en page du fragment est
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<Transition
app:constraintSetEnd="@id/collapsed"
app:constraintSetStart="@id/expanded">
<OnSwipe
app:dragDirection="dragUp"
app:touchAnchorSide="top"
app:moveWhenScrollAtTop="@+id/rv_list" />
</Transition>
<ConstraintSet android:id="@+id/expanded"
android:id="@+id/cardView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="@+id/tv_delivery_type"
app:layout_constraintStart_toStartOf="@+id/imageView15"
app:layout_constraintTop_toBottomOf="@+id/view4" />
</ConstraintSet>
<ConstraintSet android:id="@+id/collapsed">
<Constraint
android:id="@+id/cardView"
android:layout_width="0dp"
android:layout_height="1dp"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="@+id/tv_delivery_type"
app:layout_constraintStart_toStartOf="@+id/imageView15"
app:layout_constraintTop_toBottomOf="@+id/view4" />
</ConstraintSet>
</MotionScene>
et le code de description de mise en page est:
<android.support.constraint.motion.MotionLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
app:layoutDescription="@xml/collapsing_config_order_details"
android:layout_width="match_parent"
android:layout_height="match_parent">
...
<android.support.v7.widget.CardView
android:id="@+id/cardView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="@+id/tv_delivery_type"
app:layout_constraintStart_toStartOf="@+id/imageView15"
app:layout_constraintTop_toBottomOf="@+id/view4">
...
</android.support.v7.widget.CardView>
<android.support.v7.widget.RecyclerView
android:id="@+id/rv_list"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginBottom="8dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/cardView"
app:layout_constraintStart_toStartOf="@+id/cardView"
app:layout_constraintTop_toBottomOf="@+id/cardView" />
</android.support.constraint.motion.MotionLayout>
4 Réponses :
Remplacez
<ConstraintSet android:id="@+id/expanded" >
<Constraint android:id="@+id/cardView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="@+id/tv_delivery_type"
app:layout_constraintStart_toStartOf="@+id/imageView15"
app:layout_constraintTop_toBottomOf="@+id/view4" />
</ConstraintSet>
par
<ConstraintSet android:id="@+id/expanded"
android:id="@+id/cardView"
Chaque ConstraintSet doit avoir une Constraint par lui-même et vous devez spécifier autant de Constraint que vous souhaitez changer de scène, comme si vous souhaitez déplacer A et B ensemble avec une seule interaction, vous devez spécifier les deux dans un ConstraintSet
De plus, je ne suis pas sûr de ce que vous essayez de réaliser, mais je pense que vous besoin d'écrire du code comme ci-dessous
<OnSwipe
app:dragDirection="dragUp"
app:touchAnchorId="@id/rv_list"
app:touchAnchorSide="top" />
Cela signifie que vous ciblez rv_list pour déclencher l'action.
De plus, comme vous avez déjà ajouté viewId dans le fichier layout , vous devez changer android: id = "@ + id / cardView" en android: id = "@ id / cardView"
app:moveWhenScrollAtTop="@+id/rv_list" Vale of app:moveWhenScrollAtTop should be boolean.
Ajoutez android: nestedScrollingEnabled = "false" à votre recyclerView
fonctionne pour moi.
Fonctionne aussi pour moi, tks
y a-t-il une ressource avec l'id 0xffffffff dans votre fichier de ressources généré automatiquement?
non, cet identifiant n'est pas prédéfini dans R.java