我不能在RecyclerView中禁用滚动。我尝试调用rv.setEnabled(false),但我仍然可以滚动。

我如何禁用滚动?


当前回答

在Kotlin中,如果你不想为了设置一个值而创建一个额外的类,你可以从LayoutManager创建匿名类:

recyclerView.layoutManager = object : LinearLayoutManager(context) {
    override fun canScrollVertically(): Boolean = false
}

其他回答

XML格式:-

你可以添加

android:nestedScrollingEnabled=“false”

在子RecyclerView布局XML文件中

or

在爪哇:-

childRecyclerView.setNestedScrollingEnabled(假);

Java代码中的RecyclerView。

使用ViewCompat (Java):-

childRecyclerView.setNestedScrollingEnabled(假);将只在android_version>21设备上工作。要在所有设备上工作,请使用以下方法

ViewCompat。setNestedScrollingEnabled (childRecyclerView假);

真正的答案是

recyclerView.setNestedScrollingEnabled(false);

文档中的更多信息

Add

android:descendantFocusability="blocksDescendants"

在你的子SrollView或NestedScrollView(和父ListView, recyclerview和gridview任意一个)

这对我来说很管用:

  recyclerView.setOnTouchListener(new View.OnTouchListener() {
      @Override
      public boolean onTouch(View v, MotionEvent event) {
          return true;
      }
  });

这是一个有点笨拙的方法,但它是有效的;你可以在RecyclerView中启用/禁用滚动。

这是一个空的RecyclerView。OnItemTouchListener窃取每个触摸事件,从而禁用目标RecyclerView。

public class RecyclerViewDisabler implements RecyclerView.OnItemTouchListener {

    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
        return true;
    }

    @Override
    public void onTouchEvent(RecyclerView rv, MotionEvent e) {

    }

    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

    }
}

使用它:

RecyclerView rv = ...
RecyclerView.OnItemTouchListener disabler = new RecyclerViewDisabler();

rv.addOnItemTouchListener(disabler);        // disables scolling
// do stuff while scrolling is disabled
rv.removeOnItemTouchListener(disabler);     // scrolling is enabled again