/** * moves an item within the list from a position to a position * * @param fromPosition the position global from which we want to move * @param toPosition the global position to which to move * @return this */ public FastAdapterDialog<Item> move(int fromPosition, int toPosition) { mItemAdapter.move(fromPosition, toPosition); return this; }
/** * moves an item within the list from a position to a position * * @param fromPosition the position global from which we want to move * @param toPosition the global position to which to move * @return this */ public FastAdapterBottomSheetDialog<Item> move(int fromPosition, int toPosition) { mItemAdapter.move(fromPosition, toPosition); return this; }
public static void onMove(ItemAdapter itemAdapter, int oldPosition, int newPosition) { // necessary, because the positions passed to this function may be jumping in case of that the recycler view is scrolled while holding an item outside of the recycler view if (oldPosition < newPosition) { for (int i = oldPosition + 1; i <= newPosition; i++) { itemAdapter.move(i, i - 1); } } else { for (int i = oldPosition - 1; i >= newPosition; i--) { itemAdapter.move(i, i + 1); } } } }
/** * moves an item within the list from a position to a position * * @param fromPosition the position global from which we want to move * @param toPosition the global position to which to move * @return this */ public FastItemAdapter<Item> move(int fromPosition, int toPosition) { getItemAdapter().move(fromPosition, toPosition); return this; }
@Test public void move() throws Exception { itemAdapter.set(TestDataGenerator.genTestItemList(11)); assertThat(itemAdapter.getAdapterItemCount()).isEqualTo(11); TestItem movedItem = itemAdapter.getAdapterItem(0); TestItem changedItem = itemAdapter.getAdapterItem(1); itemAdapter.move(0, 10); assertThat(itemAdapter.getAdapterItemCount()).isEqualTo(11); assertThat(movedItem).isEqualTo(itemAdapter.getAdapterItem(10)); assertThat(changedItem).isEqualTo(itemAdapter.getAdapterItem(0)); }
@Test public void move() throws Exception { itemAdapter.set(TestDataGenerator.genTestItemList(11)); assertThat(itemAdapter.getAdapterItemCount()).isEqualTo(11); TestItem movedItem = itemAdapter.getAdapterItem(0); TestItem changedItem = itemAdapter.getAdapterItem(1); itemAdapter.move(0, 10); assertThat(itemAdapter.getAdapterItemCount()).isEqualTo(11); assertThat(movedItem).isEqualTo(itemAdapter.getAdapterItem(10)); assertThat(changedItem).isEqualTo(itemAdapter.getAdapterItem(0)); }
@Override public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { // remember the from/to positions IItem item = FastAdapter.getHolderAdapterItem(viewHolder); if (item instanceof IDraggable) { if (((IDraggable) item).isDraggable()) { if (mFrom == RecyclerView.NO_POSITION) { mFrom = viewHolder.getAdapterPosition(); } mTo = target.getAdapterPosition(); } } if (mCallbackItemTouch == null) { RecyclerView.Adapter adapter = recyclerView.getAdapter(); ItemAdapter itemAdapter = null; if (adapter instanceof FastItemAdapter) { itemAdapter = ((FastItemAdapter) adapter).getItemAdapter(); } else if (adapter instanceof FastAdapter) { //TODO this logic only works for the adapter at position 0 --> in the past it also only worked for the outer adapter itemAdapter = (ItemAdapter) ((FastAdapter) adapter).adapter(0); } if (itemAdapter != null) { itemAdapter.move(itemAdapter.getFastAdapter().getHolderAdapterPosition(viewHolder), itemAdapter.getFastAdapter().getHolderAdapterPosition(target)); return true; } throw new RuntimeException("SimpleDragCallback without an callback is only allowed when using the ItemAdapter or the FastItemAdapter"); } return mCallbackItemTouch.itemTouchOnMove(viewHolder.getAdapterPosition(), target.getAdapterPosition()); // information to the interface }
List items = mItemAdapter.getAdapterItems(); if (items.size() > firstVisiblePosition + 3) { mItemAdapter.move(firstVisiblePosition + 1, firstVisiblePosition + 3);