Dans un pager de vue, j'ai plusieurs fragments, l'un d'eux utilise un scrollview imbriqué avec un en-tête et une vue de recyclage:
<Android.support.v4.widget.NestedScrollView
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"
Android:id="@+id/scrollview"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:fillViewport="true"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context="com.m360.Android.fragment.Members.MemberDetailsFragment">
<LinearLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:orientation="vertical"
Android:paddingTop="20dp">
<header/>
<Android.support.v7.widget.RecyclerView
Android:id="@+id/recycler"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:clipToPadding="false"
Android:paddingTop="0dp" />
</LinearLayout>
</Android.support.v4.widget.NestedScrollView>
La balise "header" représente une mise en page complexe que je ne voulais pas publier ici car elle étire beaucoup le code.
lorsque je bascule entre les onglets, il défile directement vers la vue du recycleur. L'en-tête est caché, je dois faire défiler vers le haut pour le voir.
Des idées sur ce qui cause ça? Je ne veux pas utiliser de type dans mon adaptateur si je peux l'éviter.
Nous avons un problème similaire. Nous avons un RecyclerView
vertical. Chaque élément de ce RecyclerView
vertical contient un RecyclerView
horizontal, comme dans l'application Android TV.
Lorsque nous avons mis à niveau les bibliothèques de support de 23.4.0 à 24.0.0, le défilement automatique est soudainement apparu. En particulier, lorsque nous ouvrons un Activity
et que nous revenons ensuite en arrière, la verticale RecyclerView
défile vers le haut afin que la ligne horizontale actuelle RecyclerView
ne soit pas coupée et la ligne s'affiche complètement.
L'ajout de Android:descendantFocusability="blocksDescendants"
Résout le problème.
Cependant, j'ai trouvé ne autre solution , qui fonctionne également. Dans notre cas, le RecyclerView
vertical est contenu dans un FrameLayout
. Si j'ajoute Android:focusableInTouchMode="true"
À ce FrameLayout
, le problème disparaît.
Il y a même un troisième solution mentionnée ici , qui consiste essentiellement à appeler setFocusable(false)
sur l'enfant/intérieur RecyclerView
s. Je n'ai pas essayé ça.
Par ailleurs, il y a un problème ouvert sur l'AOSP .
ensembleAndroid:focusableInTouchMode="true"
pour Layout enfant (peut être LinearLayout
) de NestedScrollView