Je viens de mettre à l'API 26 et le soutien de la bibliothèque 26.0.2. Mais j'ai trouvé que mes RecyclerView
des articles n'est pas cliquable à droite après le défilement. Si vous attendez une seconde, il va fonctionner. Mais si vous cliquez sur l'élément immédiatement, il ne sera pas. Même si l' RecyclerView
n'est pas défilement(par exemple a un défilement vers le haut).
Quand j'ai rétrogradé à la bibliothèque de prise en charge 25.4.0 tout va bien à nouveau.
Le point clé est que mes RecyclerView
est en CoordinatorLayout
et a un SCROLL_FLAG_SCROLL
drapeau sur ma Toolbar
de la AppBarLayout
. Si je n'utilise pas ce drapeau, ce problème disparaîtra. Donc, je pense que c'est caché pour le changement de comportement de la bibliothèque de prise en charge 26.
J'ai essayé d'ajouter focusable="false"
de la CoordinatorLayout
mais toujours pas eu de chance.
Est-il possible de désactiver ce comportement? Parce que c'est vraiment ennuyeux de cliquer deux fois pour déclencher l'événement click.
<android.support.design.widget.CoordinatorLayout
android:id="@+id/coordinateLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.design.widget.AppBarLayout
android:id="@+id/fragmentAppBar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:elevation="0dp"
android:background="@null">
<include
android:id="@+id/dynamicActionBarHolder"
layout="@layout/dynamic_action_bar"/>
</android.support.design.widget.AppBarLayout>
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/pullToRefreshMailRecycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.v7.widget.RecyclerView
android:id="@+id/mailRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.support.v4.widget.SwipeRefreshLayout>
</android.support.design.widget.CoordinatorLayout>
MODIFIER
Je pense que le problème est l' scrollState
de la RecyclerView
. Quand il est arrêté le défilement, c'est n'est pas modifié ( SCROLL_STATE_IDLE
immédiatement. En regardant dans le code source de RecyclerView
, j'ai trouvé il y a un ViewFlinger
contrôler le défilement de l'état. Quand je la jeter en bas pour faire défiler vers le haut, il n'est pas en appelant setScrollState(SCROLL_STATE_IDLE)
immédiatement, au lieu de cela, il attendre un moment pour déclencher cette méthode. Le plus rapide que j'ai fling, le plus de temps je dois attendre. Tout comme la RecyclerView est encore le défilement en arrière-plan. Parce que l' scroller.isFinished()
ne retourne pas de véritable droit après l' RecyclerView
arrêter le défilement quand il a touché le haut. Peut-être que c'est un bug de l' RecyclerView
dans CoordinatorLayout
.