2016-01-28 25 views
0

如何避免scrollState不是IDLE時滾動RecyclerView?Android RecyclerView:滾動狀態不是空閒時如何避免滾動中斷(滾動兩次)?

我已經嘗試了一些想法,就像在我LinearLayoutManager覆蓋canScrollHorizontally()並返回false當應用於scrollState != IDLE或同一概念dispatchTouchEvent()Activity,但它只是停留在屏幕永遠。

我也嘗試過的Asyntask方法,但while循環使其永遠無法逃脫doInBackground和去onPostExercute:

​​

我的目的是爲了避免用戶在同一時間跳過任何頁面(滾動兩次或更多次)。我怎樣才能實現它?感謝分享。

回答

0

不知道這是一個糟糕的解決方案,但一個更好的答案出來之前:

@Override 
     public void onScrollStateChanged(RecyclerView recyclerView, int newState) { 
      super.onScrollStateChanged(recyclerView, newState); 

      if (previousScrollState != RecyclerView.SCROLL_STATE_IDLE) { 

       if (asyncCheckScrollState == null || asyncCheckScrollState.isCancelled()) { 

        asyncCheckScrollState = new AsyncCheckScrollState(); 
        asyncCheckScrollState.execute(); 

       } 
      } 

     // ... 

     previousScrollState = newState; 
} 

和:

public class AsyncCheckScrollState extends AsyncTask<Void, Void, Void> { 

    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     recList.setTouchEnabled(false); 
    } 

    @Override 
    protected Void doInBackground(Void... params) { 

     try { 

      while (previousScrollState != 0) { 
       if (isCancelled()) { 
        Log.i(TAG, "canceled "); 
        break; 
       } 
      } 

     } catch (Exception e) { 
     } finally { 
      this.cancel(true); 
     } 

     return null; 
    } 

    @Override 
    protected void onCancelled() { 
     super.onCancelled(); 
     recList.setTouchEnabled(true); 
    } 
}