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