android smoothscrolltoposition прокручивает к последнему элементу напрямую (BUG) - PullRequest
1 голос
/ 08 ноября 2019

Я делаю горизонтальный RecyclerView (с разметкой ширины MATCH_PARENT), который должен автоматически прокручиваться к следующему / предыдущему элементу, когда пользователь перестает перетаскивать между двумя элементами

Я пытался это

recyclerView5.addOnScrollListener(new RecyclerView.OnScrollListener(){
            int currentPosition = 0;
            @Override
            public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
                if (RecyclerView.SCROLL_STATE_DRAGGING != newState){
                    if(currentPosition > 0){
                        Log.i(TAG, "onScrollStateChanged: Right" + manager5.findFirstVisibleItemPosition() + 1 );
                        recyclerView5.smoothScrollToPosition(manager5.findFirstVisibleItemPosition() + 1);

                    }else {
                        Log.i(TAG, "onScrollStateChanged: Left");
                        recyclerView5.smoothScrollToPosition(manager5.findFirstVisibleItemPosition() - 1);
                    }
                }
            }

            @Override
            public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
                currentPosition = dx;
            }
        });

Он выполняет прокрутку, но выполняет прокрутку непосредственно до последнего элемента, а не до следующего элемента, и при прокрутке влево он переходит к первому элементу напрямую, после чего происходит сбой действия. Java.lang.IllegalArgumentException: недопустимая целевая позиция. В logcat я вижу

Log.i(TAG, "onScrollStateChanged: Right" + manager5.findFirstVisibleItemPosition() + 1 );

возвращает

onScrollStateChanged: Right01
onScrollStateChanged: Right11
onScrollStateChanged: Right21
onScrollStateChanged: Right31
onScrollStateChanged: Right41

Я думаю, что должно возвращаться 01, 02, 03, 04 Я не знаю, правильно это или нет, любая помощь?

...