NestedScrollView 滚动后 RecyclerView 中的 onClick 方法不起作用

onClick method inside RecyclerView not working after NestedScrollView scrolled

我检查了因为它非常相似,但是Google的错误已经在当前版本中得到修复,但我仍然有问题。

我在 NestedScrollView 中有一个 RecyclerView,在 NestedScrollView 滚动后,如果我单击 RecyclerView 中的项目,onClick 方法无法正常工作。

谁能帮帮我?谢谢

好的,我找到了解决方案here,我们需要:

public class FixAppBarLayoutBehavior extends AppBarLayout.Behavior {

public FixAppBarLayoutBehavior() {
    super();
}

public FixAppBarLayoutBehavior(Context context, AttributeSet attrs) {
    super(context, attrs);
}

@Override
public void onNestedScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child, View target,
                           int dxConsumed, int dyConsumed, int dxUnconsumed, int dyUnconsumed, int type) {
    super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed,
            dxUnconsumed, dyUnconsumed, type);
    stopNestedScrollIfNeeded(dyUnconsumed, child, target, type);
}

@Override
public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, AppBarLayout child,
                              View target, int dx, int dy, int[] consumed, int type) {
    super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed, type);
    stopNestedScrollIfNeeded(dy, child, target, type);
}

private void stopNestedScrollIfNeeded(int dy, AppBarLayout child, View target, int type) {
    if (type == ViewCompat.TYPE_NON_TOUCH) {
        final int currOffset = getTopAndBottomOffset();
        if ((dy < 0 && currOffset == 0)
                || (dy > 0 && currOffset == -child.getTotalScrollRange())) {
            ViewCompat.stopNestedScroll(target, ViewCompat.TYPE_NON_TOUCH);
        }
    }
}

}

并且,在我们的 AppBarLayout 中:

        <android.support.design.widget.AppBarLayout>
         ...
        app:layout_behavior="your.package.FixAppBarLayoutBehavior" 
         ... 
        </android.support.design.widget.AppBarLayout>

您的 RecyclerView 不应允许嵌套滚动,因此它必须具有 nestedScrollingEnabled="false"

<androidx.recyclerview.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:nestedScrollingEnabled="false"/>