У меня есть RecyclerView, управляемый LinearlayoutManager, если я заменяю элемент 1 на 0, а затем вызываю mAdapter.notifyItemMoved (0,1), движущаяся анимация заставляет экран прокрутки. Как я могу это предотвратить?RecyclerView.Adapter.notifyItemMoved (0,1) scrolls screen
ответ
Звоните scrollToPosition(0)
после перемещения элементов. К сожалению, я полагаю, LinearLayoutManager пытается сохранить первый элемент стабильным, который перемещается, поэтому он перемещает список с ним.
Хотя это решило мою проблему, взгляните на это https://code.google.com/p/android/issues/detail?id=99047 – Ari
Спасибо за отчет. Мы это исправим. Приносим извинения за неудобства. К счастью, существует относительно простое решение. Btw, scrollToPosition просто отображает вид на видимый видовой экран, так что безопасно вызывать его все время, даже если вы не перемещаете первый элемент. – yigit
Спасибо, человек! Я использовал ItemTouchHelper для перетаскивания элементов и имел проблемы при перетаскивании первого элемента во второй. Из-за свитка. Потеряно 3 дня, выясняя, что было не так !!! –
К сожалению, обходной путь, представленный yigit, прокручивает RecyclerView
к началу. Это лучший обходной путь я нашел до сих пор:
// figure out the position of the first visible item
int firstPos = manager.findFirstCompletelyVisibleItemPosition();
int offsetTop = 0;
if(firstPos >= 0) {
View firstView = manager.findViewByPosition(firstPos);
offsetTop = manager.getDecoratedTop(firstView) - manager.getTopDecorationHeight(firstView);
}
// apply changes
adapter.notify...
// reapply the saved position
if(firstPos >= 0) {
manager.scrollToPositionWithOffset(firstPos, offsetTop);
}
Я была такая же проблема с GridLayoutManager, и принятый ответ scrollToPosition (после переезда) установил ее! – Matt