【问题标题】:disable touch events of RecyclerView (to prevent user touches)?禁用 RecyclerView 的触摸事件(以防止用户触摸)?
【发布时间】:2020-04-14 10:16:23
【问题描述】:

我的应用中有一个 RecyclerView,它显示数据。我想禁用 RecyclerView 的用户触摸事件。我已经尝试了下面的代码,但它不起作用。

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

请帮帮我。

【问题讨论】:

标签: android android-recyclerview


【解决方案1】:

几天前我有一个类似的用例,现在偶然发现了这个问题:
你可以添加任何一个

到您的 RecyclerView。

使用RecyclerView.SimpleOnItemTouchListener的示例:

recyclerView.addOnItemTouchListener(new RecyclerView.SimpleOnItemTouchListener() {
    @Override
    public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
        // true: consume touch event
        // false: dispatch touch event
        return true;
   }
});

当我的SwipeRefreshLayout 通过查询swipeLayout.isRefreshing() 进行后台工作时,我使用了触摸事件。

【讨论】:

    【解决方案2】:

    你可以使用 RecyclerView 功能 public void setLayoutFrozen(boolean frozen)

    【讨论】:

    【解决方案3】:

    Java:

    recyclerView.addOnItemTouchListener(new RecyclerView.SimpleOnItemTouchListener() {
        @Override
        public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
            return true;
        }
    });
    

    科特林:

    recyclerView.addOnItemTouchListener(object : RecyclerView.SimpleOnItemTouchListener() {
        override fun onInterceptTouchEvent(rv: RecyclerView, e: MotionEvent): Boolean {
            return true
        }
    })
    

    就用这个,解决了我的问题(;

    【讨论】:

    • 注意,这种方法不仅不能触摸,而且不能滚动。
    • 这不会阻止触摸,在 Android Q 上测试。我以编程方式设置平滑滚动,然后在滚动时触摸,然后停止。
    【解决方案4】:

    如果您返回true,触摸事件将被禁用。

    如果启用了 Return false 触摸事件。

    recyclerView.addOnItemTouchListener(new RecyclerView.SimpleOnItemTouchListener() {
        @Override
        public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
            return true;
       }
    });
    

    希望对你有帮助..

    【讨论】:

      【解决方案5】:

      您可以使用yourRecyclerView.suppressLayout(true) 禁用用户交互

      【讨论】:

      • 对于我的用例来说它的工作就像 cham 一样出色,可以在我的嵌套 recyclerview 上禁用触摸事件
      【解决方案6】:

      您可以覆盖 LinearLayoutManager canScrollHorizontally 方法

      getRecyclerView().setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.HORIZONTAL, false) {
          @Override
          public boolean canScrollHorizontally() {
              return false;
          }
      });
      

      【讨论】:

        猜你喜欢
        • 2016-07-17
        • 2011-01-04
        • 1970-01-01
        • 1970-01-01
        • 2020-10-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-09
        相关资源
        最近更新 更多