Я реализовал горизонтальный прокрученный переработкой . My recyclerview использует LinearLayoutManager , и проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь использовать ScrollToposition (position) или SmoothScrolltoposition (Position) или из Linearlayoutmanager ScrolltopositionWithOffSet (Position) . Ни один не работает для меня. Либо вызов прокрутки не прокручивается в желаемое местоположение, либо не вызывает onscrolllistener < /code>. < /P>
Пока я пробовал так много разных комбинаций Код, который я не могу опубликовать их здесь. Ниже приведен тот, который работает для меня (но только частично): < /p>
public void smoothUserScrollTo(final int position) {
if (position < 0 || position > getAdapter().getItemCount()) {
Log.e(TAG, "An attempt to scroll out of adapter size has been stopped.");
return;
}
if (getLayoutManager() == null) {
Log.e(TAG, "Cannot scroll to position a LayoutManager is not set. " +
"Call setLayoutManager with a non-null layout.");
return;
}
if (getChildAdapterPosition(getCenterView()) == position) {
return;
}
stopScroll();
scrollToPosition(position);
if (lastScrollPosition == position) {
addOnLayoutChangeListener(new OnLayoutChangeListener() {
@Override
public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
if (left == oldLeft && right == oldRight && top == oldTop && bottom == oldBottom) {
removeOnLayoutChangeListener(this);
updateViews();
// removing the following line causes a position - 3 effect.
scrollToView(getChildAt(0));
}
}
});
}
lastScrollPosition = position;
}
@Override
public void scrollToPosition(int position) {
if (position < 0 || position > getAdapter().getItemCount()) {
Log.e(TAG, "An attempt to scroll out of adapter size has been stopped.");
return;
}
if (getLayoutManager() == null) {
Log.e(TAG, "Cannot scroll to position a LayoutManager is not set. " +
"Call setLayoutManager with a non-null layout.");
return;
}
// stopScroll();
((LinearLayoutManager) getLayoutManager()).scrollToPositionWithOffset(position, 0);
// getLayoutManager().scrollToPosition(position);
}
< /code>
Я выбрал ScrolltopositionWithOffSet () < /code> из -за этого, но случай, возможно, отличается, так как я использую LineArlayOutManager вместо GridLayoutManager. Но решение действительно работает для меня тоже, но, как я уже говорил ранее только частично. - 7 Scroll работает как очарование. Второй раз, когда я могу прокрутить тонкую прокрутку < /li>
При прокрутке от Totalsize - 3 до уровня я начинаю получать неожиданное поведение. < /li>
< /ul>
Если кто -то нашел работу, я бы оценил это. Вот суть моего кода пользовательского reyclerview
Я реализовал горизонтальный прокрученный переработкой . My recyclerview использует LinearLayoutManager , и проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь использовать ScrollToposition (position) или SmoothScrolltoposition (Position) или из Linearlayoutmanager ScrolltopositionWithOffSet (Position) . Ни один не работает для меня. Либо вызов прокрутки не прокручивается в желаемое местоположение, либо не вызывает onscrolllistener < /code>. < /P>
Пока я пробовал так много разных комбинаций Код, который я не могу опубликовать их здесь. Ниже приведен тот, который работает для меня (но только частично): < /p>
[code]public void smoothUserScrollTo(final int position) {
if (position < 0 || position > getAdapter().getItemCount()) { Log.e(TAG, "An attempt to scroll out of adapter size has been stopped."); return; }
if (getLayoutManager() == null) { Log.e(TAG, "Cannot scroll to position a LayoutManager is not set. " + "Call setLayoutManager with a non-null layout."); return; }
if (getChildAdapterPosition(getCenterView()) == position) { return; }
stopScroll();
scrollToPosition(position);
if (lastScrollPosition == position) {
addOnLayoutChangeListener(new OnLayoutChangeListener() { @Override public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) {
if (left == oldLeft && right == oldRight && top == oldTop && bottom == oldBottom) { removeOnLayoutChangeListener(this);
updateViews();
// removing the following line causes a position - 3 effect. scrollToView(getChildAt(0)); } } }); }
lastScrollPosition = position; }
@Override public void scrollToPosition(int position) { if (position < 0 || position > getAdapter().getItemCount()) { Log.e(TAG, "An attempt to scroll out of adapter size has been stopped."); return; }
if (getLayoutManager() == null) { Log.e(TAG, "Cannot scroll to position a LayoutManager is not set. " + "Call setLayoutManager with a non-null layout."); return; }
Я выбрал ScrolltopositionWithOffSet () < /code> из -за этого, но случай, возможно, отличается, так как я использую LineArlayOutManager вместо GridLayoutManager. Но решение действительно работает для меня тоже, но, как я уже говорил ранее только частично. - 7 Scroll работает как очарование. Второй раз, когда я могу прокрутить тонкую прокрутку < /li> При прокрутке от Totalsize - 3 до уровня я начинаю получать неожиданное поведение. < /li> < /ul>
Если кто -то нашел работу, я бы оценил это. Вот суть моего кода пользовательского reyclerview [/code].