Problem describe:
When RecyclerView's LayoutManager is horizontal LinearLayoutManager, viewHolder can not be dragged left or right.
Problem code:
ItemDragHelperCallback getMovementFlags()
if (manager instanceof GridLayoutManager || manager instanceof StaggeredGridLayoutManager) {
dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
} else {
dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
}
Fix:
if (manager instanceof GridLayoutManager || manager instanceof StaggeredGridLayoutManager) {
dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
} else { // LinearLayoutManager
LinearLayoutManager linearLayoutManager = (LinearLayoutManager) manager;
if (linearLayoutManager.getOrientation() == LinearLayoutManager.HORIZONTAL) {
dragFlags = ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
} else {
dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
}
}