在行之间交换2个项目时,将其他元素留在原处

时间:2019-03-11 16:30:11

标签: android android-recyclerview gridlayoutmanager itemtouchhelper

我使用GridLayoutManager将RecyclerView设置为spanCount设置为2。 我正在使用ItemTouchHelper.Callback实现来处理拖放操作,以允许用户彼此交换两个元素。

我正在设置移动标志,如下所示:

@Override public int getMovementFlags(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder) {
    int dragFlags = 0;
    int swipeFlags = 0;
    if (view.getSelectedItemId() == R.id.bottom_video_menu_one_cam) {
        swipeFlags |= ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
    } else {
        dragFlags |= ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
    }
    return makeMovementFlags(dragFlags, swipeFlags);
}

当onMove方法触发我的回调时,我正在使用以下代码交换两个元素:

    @Override public void onItemMoved(int oldPosition, int newPosition) {
        Collections.swap(cameras, oldPosition, newPosition);
        notifyItemMoved(oldPosition, newPosition);
    }

如果我在网格中将“ A1”项与“ A2”项交换,则一切正常:

交换之前:

A1 A2

B1 B2

=== 用A2交换A1 ===

交换后:

A2 A1

B1 B2

在行之间交换时,我试图实现以下逻辑:

交换之前:

A1 A2

B1 B2

=== 用B1交换A1 ===

交换后的预期结果:

B1 A2

A1 B2

但不是整个网格都重新排列,而是变为:

A2 B1

A1 B2

在交换网格中的元素时,是否有任何方法\属性可以保持其他视图位置不变?

0 个答案:

没有答案