10

私は ItemTouchHelper と ItemTouchHelper.SimpleCallback を使用して、ユーザーが垂直リストのリサイクラー ビューを並べ替えられるようにしています。

ドラッグアンドドロップは機能しますが、ドラッグされたセルから指を離していなくても、最初にジャンプした行の後にドロップが強制されます。

以下の SimpleCallback を見つけてください:

private void initSwipeAndDrap() {

    ItemTouchHelper.SimpleCallback simpleItemTouchCallback =
            new ItemTouchHelper.SimpleCallback(
                    ItemTouchHelper.UP | ItemTouchHelper.DOWN,
                    0) {

                //========== Swipe (Not used) ==============

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


                //========== Drag ==============

                @Override
                public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {

                    int fromPosition = viewHolder.getAdapterPosition();
                    int toPosition = target.getAdapterPosition();

                    Podcast podcast = rva.podcasts.remove(fromPosition);
                    rva.podcasts.add(toPosition, podcast);
                    act.dmo.updatePodcastsListPosition();
                    act.dmo.notifyDataSetChangedPodcast();

                    return true;
                }

                @Override
                public boolean isLongPressDragEnabled() {
                    return false;
                }


            };

    itemTouchHelper = new ItemTouchHelper(simpleItemTouchCallback);
    itemTouchHelper.attachToRecyclerView(rv);
}
4

3 に答える 3

5

onMove() メソッドで notifyDataSetChanged() を notifyItemMoved() に置き換えると、問題が解決しました。

ドロップ後に onMove() が呼び出されたと思っていたので、これには驚きました。実際、それはドロップ自体に影響を与えます。

于 2016-08-03T07:50:15.473 に答える