自定義PullToRefresh正在重新整理的時候不能滑動listview問題解決
阿新 • • 發佈:2019-02-13
今天在定義PullToRefresh的時候遇到一個問題,繼承了PullToRefreshBase類實現了相關方法,為recyclerView添加了上啦和下拉功能後發現正在重新整理的時候recyclerView不能滑動。根據時間分發的順序,我首先想到的就是正在重新整理的時候PullToRefreshBase把事件給攔截了,所以檢視PullToRefreshBase原始碼的onInterceptTouchEvent方法:
@Override
public final boolean onInterceptTouchEvent(MotionEvent event) {
if (!isPullToRefreshEnabled()) {
return false;
}
final int action = event.getAction();
if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
mIsBeingDragged = false;
return false;
}
if (action != MotionEvent.ACTION_DOWN && mIsBeingDragged) {
return true;
}
switch (action) {
case MotionEvent.ACTION_MOVE: {
// If we're refreshing, and the flag is set. Eat all MOVE events
if (!mScrollingWhileRefreshingEnabled && isRefreshing()) {
return true;
}
if (isReadyForPull()) {
final float y = event.getY(), x = event.getX();
final float diff, oppositeDiff, absDiff;
.....................
可以看到switch裡第一個if條件如果正在重新整理並且!mScrollingWhileRefreshingEnabled的時候就對事件進行攔截,所以我們可以嘗試看看有沒有提供可以改變mScrollingWhileRefreshingEnabled變數的方法。果然,提供了setScrollingWhileRefreshingEnabled方法,所以如果要讓自定義的view重新整理的時候可以滑動,只需要在初始化的時候setScrollingWhileRefreshingEnabled(true)就ok了。