Mam RecyclerView zarządzany przez LinearlayoutManager, jeśli zamieniam element 1 na 0, a następnie wywołuję mAdapter.notifyItemMoved (0,1), ruchoma animacja powoduje, że ekran zwój. Jak mogę temu zapobiec?Ekran RecyclerView.Adapter.notifyItemMoved (0,1) przesuwa
Odpowiedz
Zadzwoń pod scrollToPosition(0)
po przeniesieniu przedmiotów. Niestety, zakładam, że LinearLayoutManager stara się utrzymać stabilny pierwszy przedmiot, który porusza się, więc przesuwa listę za jego pomocą.
Mimo że to rozwiązało mój problem, zapoznaj się z tym https://code.google.com/p/android/issues/detail?id=99047 – Ari
Dziękuję za zgłoszenie. Naprawimy to. Przepraszam za niedogodności. Na szczęście istnieje stosunkowo łatwe obejście tego problemu. Btw, scrollToPosition powoduje przeniesienie widoku do widocznego widoku, więc można go bezpiecznie wywoływać przez cały czas, nawet jeśli nie przenosisz pierwszego elementu. – yigit
Dzięki człowieku! Użyłem ItemTouchHelper do przeciągania przedmiotów i miałem problemy podczas przeciągania pierwszego elementu do drugiego. Z powodu przewijania. Straciłem 3 dni, zastanawiając się, co było nie tak !!! –
Niestety obejście przedstawione przez yigit przewija RecyclerView
na górę. To jest najlepsze obejście, które znalazłem do tej pory:
// 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);
}
Miałem ten sam problem z GridLayoutManager, a przyjęta odpowiedź scrollToPosition (po ruchu) to naprawiła! – Matt