Search code examples
androidscrollandroid-recyclerviewcancellation

Android - RecyclerView - How do I temporarily prevent scrolling?


I have a RecyclerView that I wish to freeze (ie, not allow the user to scroll, but still be able to tap any current visible views) until a certain condition is met. How do I achieve this?

I've tried to set an OnScrollListener as following:

@Override
public void onScrolled(final RecyclerView recyclerView, final int dx, final int dy) {

     super.onScrolled(recyclerView, dx, dy);

     if(myCondition){
         recyclerView.stopScroll();
     }
});

without success.


Solution

  • I've figured it out. OnItemTouchListener should be used instead:

    onItemTouchListener = new OnItemTouchListener() {
    
          @Override
          public boolean onInterceptTouchEvent(final RecyclerView recyclerView, final MotionEvent e) {
    
              if(myCondition){
    
                  switch(e.getAction()){
    
                      case MotionEvent.ACTION_MOVE: return true;
                  }
              }
    
              return false;
          }
    
          @Override
          public void onTouchEvent(final RecyclerView recyclerView, final MotionEvent e) {
          }
    };
    

    Now you add it to your RecyclerView:

    yourRecyclerView.addOnItemTouchListener(onItemTouchListener);
    

    If anyone finds an easier way, please, let me know!