Android 通过拖放更改卡片视图位置

Android cardview change position with drag and drop

我想让我的卡片视图在片段(Navigation Drawler)中能够通过拖放更改列表中的位置。

我的布局文件结构:

FrameLayout{
LinearLayout{
cardview_1
card_view_2}}

使用 recyclerView 并使 rowItemLayout.xml 或 columnItemLayout.xml 以 cardView 作为根视图。 然后使用recyclerView的函数如:

ItemTouchHelper itemTouchHelper = new ItemTouchHelper(createHelperCallback());
itemTouchHelper.attachToRecyclerView(recyclerView);
private ItemTouchHelper.Callback createHelperCallback() {
    ItemTouchHelper.SimpleCallback simpleItemTouchCallback =
            new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN,
                    ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
                @Override
                public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
                                      RecyclerView.ViewHolder target) {
                    moveItem(viewHolder.getAdapterPosition(), target.getAdapterPosition());
                    return true;
                }

                @Override
                public void onSwiped(final RecyclerView.ViewHolder viewHolder, int swipeDir) {
                    deleteItem(viewHolder.getAdapterPosition());
                }
            };
    return simpleItemTouchCallback;
}
 private void moveItem(int oldPos, int newPos) {

    ListItem item = (ListItem) listData.get(oldPos);
    listData.remove(oldPos);
    listData.add(newPos, item);
    adapter.notifyItemMoved(oldPos, newPos);
}

private void deleteItem(final int position) {
    listData.remove(position);
    adapter.notifyItemRemoved(position);
}