私はこの質問hereと同じ問題を抱えていました。 問題は、フライミングが発生した後、RecyclerViewの子供がタッチイベントを取得しないということです。それは、recyclerviewが上または下に達するときだけ目立つ。「タッチした後にタッチが傍受される」という問題を改善するための方法
ここでの問題は、上部または下部の位置に達した後、リサイクラビューのスクロール状態がまだSCROLL_STATE_SETTLING
(1秒または2秒間)のままであることです。この状態は、まだrecyclerview
がまだFlingアニメーションを終了していないことを意味します。そして、その状態では、単純なクリックイベントは、 "SETTLING"プロセスを停止するだけです。クリック後は正常に処理されます。
バグのようです...「SETTLING」プロセスは、上部に到達したら直ちに終了する必要があるためです。 RecycleViewクラスから
コード:
if (mScrollState == SCROLL_STATE_SETTLING) {
getParent().requestDisallowInterceptTouchEvent(true);
setScrollState(SCROLL_STATE_DRAGGING);
}
私は)私の質問は 1である
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()
}
}
})
このコードでそれを修正するために管理している、それはライブラリのバグをサポートしていますか? 2)この問題を解決するためのより適切な方法は何ですか?カスタムリスナーは私にとってはあまり良くないようです。
PS:私のビュー階層は、NestedScrollView内のRecyclerViewではありません。 AppbarとViewPagerの下ではRelativeLayoutであり、フラグメントを持っています。あなたの子ビューが利用可能なすべてのスペースを埋めるていないか、1つのページでPagerSnapHelperを使用している場合、それは失敗するので
ここ<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>