recyclerview добавить scrollListener - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть RecyclerView с горизонтальным LinearLayoutManager. Я хотел бы проверить ScrollListener. Моя цель - проверить эти шаги:

  1. Проверить, когда RecyclerView начать прокрутку
  2. Проверка, когда RecyclerView конец прокрутки
  3. Проверка, когда RecyclerView находится в центральном положении

Вот мой RecyclerView код с LinearLayoutManager.

LinearLayoutManager horizontalManager = new LinearLayoutManager(context);
        horizontalManager.setOrientation(LinearLayoutManager.HORIZONTAL);
        viewHolderStory.recyclerView.setLayoutManager(horizontalManager);
        viewHolderStory.recyclerView.addItemDecoration(new PaddingItemDecoration((Activity) context));
        viewHolderStory.recyclerView.setHasFixedSize(true);
        viewHolderStory.recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
            @Override
            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);

            }
        });
        viewHolderStory.recyclerView.setNestedScrollingEnabled(false);

Можно ли добавить проверку моего метода addOnScrollListener?

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

Вы можете вычислить это с computeVerticalScrollExtent(), computeVerticalScrollOffset() и computeVerticalScrollRange()

если ваш вид recyler горизонтальный, эти функции имеют горизонтальный аналог

полный код:

viewHolderStory.recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() 
{
    @Override
    public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
        int extent = recyclerView.computeVerticalScrollExtent();
        int offset = recyclerView.computeVerticalScrollOffset();
        int range = recyclerView.computeVerticalScrollRange();

        if(offset == 0){
            //fire when recycler view hit top
            Log.i("myTag", "onScrolled: top");
        }
        else if(offset + extent == range){
            //fire when recycler view hit bottom
            Log.i("myTag", "onScrolled: bottom");
        }
        else {
            //fire the rest of the time
            Log.i("myTag", "onScrolled: middle");
        }
    }
});
0 голосов
/ 03 апреля 2019
 public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
                super.onScrollStateChanged(recyclerView, newState);
                if(newState==RecyclerView.SCROLL_STATE_IDLE){
                    /// User Stops Scroll
                 }
                if(newState==RecyclerView.SCROLL_STATE_DRAGGING){
                 /// User Starts Scroll
              }
            }

Вы можете найти больше от этого .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...