2016-03-03 111 views
2

我有一个简单的recyclerview与字符串显示数字列表的适配器,我想避免recyclerview停止滚动时,它是由用户触摸。 我已经取消手动滚动recyclerview拖动由用户,但我需要通过编程方式管理滚动(开始和停止滚动)防止回收站停止滚动触摸事件

我不想让用户与recyclerview交互。 下面是一个小的video,显示当用户在滚动(停止)时触摸回收站视图时发生的情况。我想取消那个行为。

这是我如何取消滚动上通过添加这些行的代码由用户

recyclerViewSlot.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() { 
     @Override 
     public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { 
      // set return "true" = disables scrolling behaviour on dragging 
      return true; 
     } 

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

     @Override 
     public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { 
     } 
    }); 

拖动,没有对行为没有变化。

recyclerViewSlot.setEnabled(false); 
recyclerViewSlot.setClickable(false); 

回答

1

您必须扩展RecyclerView类,然后手动防止onTouch被称为像这样:

public class YourRecyclerView extends RecyclerView { 

    private boolean lock=false; 
    public YourRecyclerView (Context context) { 
     super(context); 

    } 

    public YourRecyclerView (Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public YourRecyclerView (Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 

    } 


    @Override 
    public boolean onTouchEvent(MotionEvent ev) { 
     if(!lock){ 

     return super.onTouchEvent(ev); 
     } 
     else{ 
      return true; 
     } 

    } 


    /** 
    * @return the lock 
    */ 
    public boolean isLock() { 
     return lock; 
    } 

    /** 
    * @param lock the lock to set 
    */ 
    public void setLock(boolean lock) { 
     this.lock = lock; 
    } 
} 
+0

感谢Niza酒店!iv'e测试它,我得到了相同的结果,返回true或false犯规做出的行为的任何变化。你有没有测试过这个? – gustav12

+0

您可以使用该代码来防止用户滚动RecyclerView。如果你希望用户不停止RecyclerView当流苏,那么你有当recyclerView已经flinged检测,然后将其锁定 –

+0

这样\t \t list.addOnScrollListener(新OnScrollListener(){ \t \t \t @覆盖 \t \t \t公共无效onScrollStateChanged(RecyclerView recyclerView, \t \t \t \t \t INT newState){ \t \t \t \t // TODO自动生成方法存根 \t \t \t \t如果(newState == AbsListView.OnScrollListener.SCROLL_STATE_FLING){ \t \t \t \t \t list.setLock(真); \t \t \t \t} \t \t \t \t否则{ \t \t \t \t \t list.setLock(假); \t \t \t \t} \t \t \t}}); –

1

重载onInterceptTouchEvent在自定义RecyclerView就可以实现这一点。

@Override 
public boolean onInterceptTouchEvent(MotionEvent e) { 
    return false; 
}