Я делаю горизонтальный 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 Я не знаю, правильно это или нет, любая помощь?