当滚动时,CoordinatorLayout中RecyclerView的点击无效

14
我在使用RecyclerView作为CoordinatorLayout的第二个子项时遇到了奇怪的问题,紧随其后的是一个AppBarLayout(正如许多示例中所描述的)。
我的问题是当我滚动RecyclerView并想要单击特定项目时,有时需要点击两次才能选择该项,这似乎与fling行为有关。例如,如果我滚动到RecyclerView的底部,然后从屏幕底部向上快速滑动手指(为了查看更多数据,但在我的情况下,我已经滑动到了底部),然后快速单击某个项目,它似乎会停止Fling,第二次点击实际上选择了该项... 当使用不带CoordinatorLayout的简单recyclerview时,显然不会发生这种行为。
我的RecyclerView只是持有一个简单的字符串列表,并使用以下布局行为:@string/appbar_scrolling_view_behavior 你有什么想法为什么会这样吗?
[编辑] 我刚试用了Android Studio的示例滚动活动,并且看起来这是Google支持库中的一个错误。 实际上,当使用支持版本26.1.O(同样适用于26.0.0和26.0.2)时,我所说的错误存在,但是如果您尝试使用版本26.0.0-alpha1或26.0.0-beta1,则实际上可以工作...
Google有两个关于此问题的开放式错误: https://issuetracker.google.com/u/1/issues/66996774 https://issuetracker.google.com/u/1/issues/68077101 如果您遇到了相同的问题,请标记这些错误。
3个回答

15

它真的很有帮助。 - Vishal Vaishnav
@gxela 现在已经公开发布了吗? - KJEjava48

4
如果在NestedScrollView中使用RecyclerView,请将以下代码添加到RecyclerView中:
android:nestedScrollingEnabled="false"

我希望您能受益于此。

0

我也遇到了这个问题...在浪费了很多时间搜索和尝试不同的方法之后,我想出了一个诀窍,虽然不太好看,但对其他人也可能有用。

基本上,思路是模拟对nestedScrollView的点击。

在我的情况下,在检测到'AppBarLayout'完全展开后,我向嵌套发送了一个轻击。

protected void onCreate(final Bundle savedInstanceState) {

    getAppBarLayout().addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {

      @Override
      public void onOffsetChanged(final AppBarLayout appBarLayout, final int verticalOffset) {

          if (verticalOffset == 0) { 
              // State.EXPANDED
              simulatedClick(nestedScroll)
          } else if (Math.abs(verticalOffset) >= appBarLayout.getTotalScrollRange()) { 
              // State.COLLAPSED
          } else { 
              // State.IDLE
          }
      }
  });
}

private void simulatedClick(@NonNull final View view) {
    // Obtain MotionEvent object
    final long downTime = SystemClock.uptimeMillis();
    final long eventTime = SystemClock.uptimeMillis() + 100;
    final MotionEvent motionEvent = MotionEvent.obtain(downTime, eventTime, MotionEvent.ACTION_UP, 0.0f, 0.0f, 0);
    // Dispatch touch event to view
    view.dispatchTouchEvent(motionEvent);
}

注意:我并不真正推荐使用这样的黑客技巧,因为它不专业且难以维护,但是你知道得越多...


simulatedClick(nestedScroll) ?? nestedScroll是什么?如何获取它? - KJEjava48

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接