2016-03-03 115 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; 
}