Как предотвратить прокрутку пользователя при реализации swipeRefreshLayout? - PullRequest
1 голос
/ 29 мая 2019

В моем приложении у меня есть представление рециркулятора с 20 - 30 элементами, и у меня есть функция, чтобы потянуть, чтобы обновить содержимое, и я хочу предотвратить прокрутку представления пользователем, пока выполняется обновление, потому что это создает ошибкуесли пользователь связывается с прокруткой, и процесс восстановления продолжается, но я действительно теряюсь в том, как это сделать: /

eRecyclerView = findViewById(R.id.recycler_view);
        RecyclerView.LayoutManager eLayoutManager = new GridLayoutManager(this, 2);
        eRecyclerView.setLayoutManager(eLayoutManager);

 swipeRefreshLayout = findViewById(R.id.refreshSecondLevel);
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() { 
               loadNewContent();
               Handler delay = new Handler();
                delay.postDelayed(new Runnable() {
                    @Override
                    public void run() { 
                        swipeRefreshLayout.setRefreshing(false);
                    }
                }, 3000);

            }
        });

1 Ответ

1 голос
/ 29 мая 2019

Вы должны переопределить метод canScrollVertically на вашем RecyclerView.LayoutManager:

public class ToggledScrollLayoutManager extends LinearLayoutManager {
    private boolean mIsScrollEnabled = true;

    public ToggledScrollLayoutManager(Context context) {
        super(context);
    }

    public void setScrollEnabled(boolean enabled) {
        this.mIsScrollEnabled = enabled;
    }

    @Override
    public boolean canScrollVertically() {
        return mIsScrollEnabled && super.canScrollVertically();
    }
}

Затем используйте его, когда пользователь обновил страницу:

recyclerView = findViewById(R.id.recyclerView);
ToggledScrollLayoutManager layoutManager = new ToggledScrollLayoutManager();
recyclerView.setLayoutManager(layoutManager);

swipeRefreshLayout = findViewById(R.id.refreshSecondLevel);
swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
    @Override
        public void onRefresh() { 
            loadNewContent();
            layoutManager.setScrollEnabled(false);
            Handler delay = new Handler();
            delay.postDelayed(new Runnable() {
                @Override
                public void run() { 
                    swipeRefreshLayout.setRefreshing(false);
                    layoutManager.setScrollEnabled(true);
                }
            }, 3000);
        }
    }
});
...