Старый ответ
Это решение не сработало в данном случае.Но это может быть полезно для других.
Вы не предоставили необходимую часть своего кода.Однако я сильно подозреваю, что вы используете промежуточную раскладку между SwipeRefreshLayout
и вашим Recyclerview
(или ListView
).Другими словами, SwipeRefreshLayout
не является прямым родителем Recyclerview
.Исправьте это, и это будет работать.
Если вы хотите узнать, что на самом деле происходит в фоновом режиме
Если вы проверите исходный код Android, вы можете найти метод canSwipeRefreshChildScrollUp()
.Ответственным является решение о возможности прокрутки вверх дочернего представления этого макета.Это необходимо переопределить, если дочернее представление является настраиваемым представлением.
public boolean canChildScrollUp() {
if (mChildScrollUpCallback != null) {
return mChildScrollUpCallback.canChildScrollUp(this, mTarget);
}
if (android.os.Build.VERSION.SDK_INT < 14) {
if (mTarget instanceof AbsListView) {
final AbsListView absListView = (AbsListView) mTarget;
return absListView.getChildCount() > 0
&& (absListView.getFirstVisiblePosition() > 0 || absListView.getChildAt(0)
.getTop() < absListView.getPaddingTop());
} else {
return ViewCompat.canScrollVertically(mTarget, -1) || mTarget.getScrollY() > 0;
}
} else {
return ViewCompat.canScrollVertically(mTarget, -1);
}
}
Если вы используете промежуточное представление, макет обновления смахивания будет предполагать, что это target (см.mTarget в 6-й строке метода) и реализация по умолчанию этого представления всегда возвращает false, что приведет к этой проблеме.
Новый ответ
Дочерний объект CoordinatorLayout должен реализовать интерфейс NestedScrollingChild.попробуйте обернуть свой FrameLayout в NestedScrollView