Блокирование swipe-to-refresh в свернутом AppBar

  1. /**
  2.  * Block SwipeRefreshLayout in collapsed and idle state
  3.  * <p>
  4.  * Created by naik on 25.06.16.
  5.  */
  6. public class AppBarRefreshAdjustListener implements AppBarLayout.OnOffsetChangedListener {
  7.  
  8.     private static final long BLOCK_DELAY = 1000L;
  9.  
  10.     private final SwipeRefreshLayout mSwipeRefreshLayout;
  11.     private int mVerticalOffset;
  12.     private Handler mHandler = new Handler();
  13.  
  14.     public AppBarRefreshAdjustListener(SwipeRefreshLayout refreshLayout) {
  15.         mSwipeRefreshLayout = refreshLayout;
  16.         handleOffsetChanged(mVerticalOffset);
  17.     }
  18.  
  19.     @Override
  20.     public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
  21.         handleOffsetChanged(verticalOffset);
  22.     }
  23.  
  24.     private void handleOffsetChanged(int verticalOffset) {
  25.         if (verticalOffset == 0) {
  26.             mHandler.removeCallbacksAndMessages(null);
  27.             mHandler.postDelayed(() -> {
  28.                 mSwipeRefreshLayout.setEnabled(mVerticalOffset == 0);
  29.             }, BLOCK_DELAY);
  30.         } else {
  31.             mSwipeRefreshLayout.setEnabled(false);
  32.         }
  33.         mVerticalOffset = verticalOffset;
  34.     }
  35. }
Если вы на экране используете CollapsingToolbarLayout и SwipeRefreshLayout, то могли заметить неудобство: когда листаешь контент вниз, то раскрывается CollapsingToolbarLayout, и сразу же срабатывает swipe-to-refresh (как на скрине).

Этот класс решает проблему - блокирует SwipeRefreshLayout на время свертывания/развертывания AppBar:
  1. appBarLayout.addOnOffsetChangedListener(new AppBarRefreshAdjustListener(swipeRefreshLayout));

Реклама

Мы в соцсетях

tw tg yt gt