Блокирование swipe-to-refresh в свернутом AppBar
- /**
- * Block SwipeRefreshLayout in collapsed and idle state
- * <p>
- * Created by naik on 25.06.16.
- */
- public class AppBarRefreshAdjustListener implements AppBarLayout.OnOffsetChangedListener {
- private static final long BLOCK_DELAY = 1000L;
- private final SwipeRefreshLayout mSwipeRefreshLayout;
- private int mVerticalOffset;
- private Handler mHandler = new Handler();
- public AppBarRefreshAdjustListener(SwipeRefreshLayout refreshLayout) {
- mSwipeRefreshLayout = refreshLayout;
- handleOffsetChanged(mVerticalOffset);
- }
- @Override
- public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
- handleOffsetChanged(verticalOffset);
- }
- private void handleOffsetChanged(int verticalOffset) {
- if (verticalOffset == 0) {
- mHandler.removeCallbacksAndMessages(null);
- mHandler.postDelayed(() -> {
- mSwipeRefreshLayout.setEnabled(mVerticalOffset == 0);
- }, BLOCK_DELAY);
- } else {
- mSwipeRefreshLayout.setEnabled(false);
- }
- mVerticalOffset = verticalOffset;
- }
- }
Если вы на экране используете CollapsingToolbarLayout и SwipeRefreshLayout, то могли заметить неудобство: когда листаешь контент вниз, то раскрывается CollapsingToolbarLayout, и сразу же срабатывает swipe-to-refresh (как на скрине).
Этот класс решает проблему - блокирует SwipeRefreshLayout на время свертывания/развертывания AppBar:
Этот класс решает проблему - блокирует SwipeRefreshLayout на время свертывания/развертывания AppBar:
- appBarLayout.addOnOffsetChangedListener(new AppBarRefreshAdjustListener(swipeRefreshLayout));