J'ai eu le même problème que dans cette question here. Le problème est que, après le lancement, les enfants RecyclerView n'obtiennent pas d'événements tactiles. C'est seulement notable quand le recyclerview atteint le haut ou le bas.Meilleure façon de réparer "Touch Intercepted après fling"
Le problème ici est qu'après avoir atteint la position supérieure ou inférieure, l'état de défilement de la vue recycleur reste SCROLL_STATE_SETTLING
(pendant 1 ou 2 secondes). Cet état signifie que recyclerview
n'a pas encore terminé une animation de lancement. Et dans cet état, l'événement click simple n'arrête que le processus "SETTLING". Les clics suivants sont traités normalement.
Il semble bogué ... Parce que le processus "SETTLING" devrait être terminé immédiatement lorsqu'il a atteint le sommet.
Code de la classe RecycleView:
if (mScrollState == SCROLL_STATE_SETTLING) {
getParent().requestDisallowInterceptTouchEvent(true);
setScrollState(SCROLL_STATE_DRAGGING);
}
J'ai réussi à le fixer avec ce code
this.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView?, dx: Int, dy: Int) {
val canScrollUp = recyclerView?.canScrollVertically(-1)!!
val canScrollDown = recyclerView.canScrollVertically(1)
if (!canScrollUp || !canScrollDown) {
recyclerView.stopScroll()
}
}
})
Ma question est 1) Est-il soutenir bug bibliothèque? 2) Quelle est la meilleure façon de résoudre ce problème? L'écoute personnalisée ne semble pas si bonne pour moi. PS: ma hiérarchie d'affichage n'est pas RecyclerView dans NestedScrollView. C'est RelativeLayout sous Appbar et viewPager avec des fragments.
<RelativeLayout
android:id="@+id/fragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<android.support.v4.view.ViewPager
android:id="@+id/content_frame"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fafafa">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</FrameLayout>