3

У меня есть обратный вызов, который запускается после прокрутки программы до определенного элемента RecyclerView через LinearLayoutManager.smoothScrollToPosition(). Пользователь нажимает на элемент, а правый элемент прокручивается вверху RecyclerView. Я подклассифицировал LinearLayoutManager, чтобы он всегда привязывался к вершине элемента.
Это работает в случае, если событие прокрутки запущено, но когда RecyclerView уже находится в правильном положении, я не получаю обратный вызов onScrollStateChanged, так как прокрутки не происходит. Есть ли способ получить это событие? Как решить заранее, нужно ли прокручивать или не просматривать RecyclerView?Проверьте, нужно ли прокручивать RecyclerView

+0

вы можете проверить, если элемент (положение), вы хотите, чтобы перейти к уже на экран перед вызовом * LinearLayoutManager.smoothScrollToPosition() * – Bugdr0id

+0

Этого недостаточно, поскольку это может быть на экране, но не в верхней части представления, и в этом случае прокрутка будет происходить в любом случае. – Alf

+0

Как насчет layoutManager.findFirstCompletelyVisibleItemPosition() – SoroushA

ответ

-1

я нашел следующее решение сам:

// get the view the user selected 
View view = mLayoutManager.findViewByPosition(index); 
// get top offset 
int offset = view.getTop(); 
if (offset == 0) { // the view is at the top of the scrollview 
    showDetailViewInternal(event); 
} else { 
    // scrolling 
} 
+0

Это не сработает, если это последний элемент в списке, так как он никогда не прокрутит весь путь до вершины. –

1

Надеюсь следующий код поможет

if(LinearLayoutManager.findFirstCompletelyVisibleItem() == yourDesiredPosition) { 
    //do your stuff 
} else { 
    LinearLayoutManager.scrollToPositionWithOffset(yourDesiredPosition, offset); 
    //onScrollStateChanged would be trigger then. 
} 
+0

Нет, это просто говорит мне, что элемент, который я ищу, полностью виден на экране. Это ничего не говорит о положении прокрутки. Элемент может быть видимым, но в нижней части экрана и RecyclerView будет прокручиваться. – Alf

+0

У меня есть идея для вашего требования. Если все элементы адаптера не покрывают весь экран, в этом случае событие прокрутки не будет запущено. Попробуйте добавить прозрачный вид в макет адаптера и сделать его видимым в последнем элементе, если весь экран не будет закрыт. Дайте фиксированную высоту прозрачному виду, чтобы он вышел из экрана. – user320676

+0

Почему это означает, что событие прокрутки не будет запущено? В любом случае я нашел лучшее решение, чем добавление прозрачных представлений в мой макет. См. Мой ответ выше. – Alf

Смежные вопросы