如何在listview中实现Drag& Drop?

时间:2016-06-20 06:08:13

标签: android listview

我发现大多数类似问题是在几年前提出的。因此,我想知道是否有一种新的更简单的方法来实现对listview的拖放功能?我从sqilte db中获取了listview对象的数据。我没有找到一些直截了当的教程。如果有请分享链接。

我发现了这个视频:https://www.youtube.com/watch?v=_BZIvjMgH-Q 但代码链接不起作用。

1 个答案:

答案 0 :(得分:0)

正如评论中所说,使用RecyclerView实现Drag& Drop的最简单方法。它包含名为ItemTouchHelper的特殊类,可以轻松处理拖放功能。对于ListView,与RecyclerView相比,您需要编写更多代码。

以下代码是我认为有用的:

ItemTouchHelper item = new ItemTouchHelper(new ItemTouchHelper.Callback() {

        @Override
        public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
            int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN;
            int swipeFlags = 0;
            return makeMovementFlags(dragFlags, swipeFlags);
        }

        @Override
        public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
            Collections.swap(dateList, viewHolder.getAdapterPosition(), target.getAdapterPosition());
            adapter.notifyItemMoved(viewHolder.getAdapterPosition(), target.getAdapterPosition());
            return true;
        }

        @Override
        public void onMoved(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, int fromPos, RecyclerView.ViewHolder target, int toPos, int x, int y) {
            super.onMoved(recyclerView, viewHolder, fromPos, target, toPos, x, y);
            Toast.makeText(MainActivity.this, "Moved", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {}
    });

    item.attachToRecyclerView(recyclerView);