如何点击一个recyclerview?

Geo*_*rge 2 android android-layout android-view android-recyclerview

首先,我在这个问题上苦苦挣扎了很长时间。我不知道该怎么办,所以我没有运气就遵循了这些步骤和教程。

  1. 单击通过回收站查看空白空间
  2. 点击浏览recyclerview列表项

还有关于StackOverflow的一系列问题。我也写了自己的代码。可能是我在做一些愚蠢的事情,但无法弄清楚。

mRecyclerView.setOnTouchListener((v, event) -> {
    RectF rectf = new RectF((int) event.getX(), 
                            (int) event.getY(), 
                            0, 0);
    boolean contains = getCenter(mHeaderPopUp).contains(rectf);
    if (contains) {
        Toast.makeText(mContext, "Clicked", Toast.LENGTH_SHORT).show();
    }
    return false;
});

private RectF getCenter(View view) {
    Rect rect = new Rect();
    view.getLocalVisibleRect(rect);
    RectF dimens = new RectF((rect.left + rect.width() / 2), 
                             (int) (rect.top + rect.height() / 2),
                             0, 0);
    return dimens;
}
Run Code Online (Sandbox Code Playgroud)

因此,现在我已经尝试了所有这些方法,但是我无法通过recyclerview单击到recyclerview下面的视图,您可以在下图中看到该视图。recyclerview覆盖了屏幕上的所有视图,我需要将点击传递到下面的recyclerview上,我不想将这些视图放在recyclerview上方,因为当您滚动recyclerview时,它将被动画化并覆盖其所有视图。提前致谢。 这是图像

小智 5

我想我找到了。

使用 recycler.setLayoutFrozen(true);

您仍然可以将onClickListeners分配给您的项目,但是如果不这样做,则单击会成功。

从的源代码RecyclerView.java

@Override
public boolean onTouchEvent(MotionEvent e) {
    if (mLayoutFrozen || mIgnoreMotionEventTillDown) {
        return false; // <= This will prevent the RecyclerView from getting the MotionEvent
    }
...
}
Run Code Online (Sandbox Code Playgroud)

https://android.googlesource.com/platform/frameworks/support/+/refs/heads/master/v7/recyclerview/src/android/support/v7/widget/RecyclerView.java#2795

  • `recycler.setLayoutFrozen(true)` 后,recyclerView 无法滚动。它是可怕的 (3认同)