Java 拖动项目时,EdgridLayoutManager的工作不正确

Java 拖动项目时,EdgridLayoutManager的工作不正确,java,android-recyclerview,staggeredgridlayoutmanager,Java,Android Recyclerview,Staggeredgridlayoutmanager,我注意到,当所有项目不再适合整个屏幕时,我尝试将索引为0的项目向下拖动到某个位置,然后它会同时向下跳转几个项目。我查了很多资料,但没有任何解决办法。还有其他选择吗?google keep应用程序显然使用了相同的列表,但没有问题。 我将非常感谢你的帮助 GIF: 代码: @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInsta

我注意到,当所有项目不再适合整个屏幕时,我尝试将索引为0的项目向下拖动到某个位置,然后它会同时向下跳转几个项目。我查了很多资料,但没有任何解决办法。还有其他选择吗?google keep应用程序显然使用了相同的列表,但没有问题。 我将非常感谢你的帮助

GIF:

代码:

   @Override
    public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

             ........

        new ItemTouchHelper(new ItemTouchHelper.SimpleCallback(ItemTouchHelper.UP | ItemTouchHelper.DOWN,
                ItemTouchHelper.START | ItemTouchHelper.END) {
            @Override
            public boolean onMove(@NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder dragged, @NonNull RecyclerView.ViewHolder target) {
                int before = dragged.getAdapterPosition();
                int after = target.getAdapterPosition();
                Collections.swap(taskAdapter.getData(), before, after);
                taskAdapter.notifyItemMoved(before, after);
                Log.d(TAG, "moveItem: " + before + " " + after);
                return true;
            }

            @Override
            public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
                super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
                if (actionState == ItemTouchHelper.ACTION_STATE_DRAG && isCurrentlyActive) {
                    viewHolder.itemView.setSelected(true);
                } else {
                    viewHolder.itemView.setSelected(false);
                }
            }

        }).attachToRecyclerView(recyclerView);
        return v;
    }

    @Override
    public void setListAdapter() {
        taskAdapter = new TaskAdapter(getContext(), presenter);
        recyclerView.setAdapter(taskAdapter);
        recyclerView.addItemDecoration(new DividerItemDecoration(recyclerView.getContext(), DividerItemDecoration.VERTICAL));
    }

    @Override
    public void showList(List<Task> taskList) {
        Toast.makeText(getActivity(), "update list", Toast.LENGTH_SHORT).show();
        TaskDiffUtilCallback taskDiffUtilCallback =
                new TaskDiffUtilCallback(taskAdapter.getData(), taskList);
        DiffUtil.DiffResult taskDiffResult = DiffUtil.calculateDiff(taskDiffUtilCallback);
        taskAdapter.setData(new ArrayList<>(taskList));
        taskDiffResult.dispatchUpdatesTo(taskAdapter);
    }

    @Override
    public void setLayoutManager() {
        gridLayoutManager = new StaggeredGridLayoutManager(1, StaggeredGridLayoutManager.VERTICAL);
        recyclerView.setLayoutManager(gridLayoutManager);
    }
             ........
}
1598595659.000 8014-8014/com.denchic45.managerdo D/test: moveItem: 0 1
1598595659.018 8014-8014/com.denchic45.managerdo D/test: moveItem: 1 2
1598595659.034 8014-8014/com.denchic45.managerdo D/test: moveItem: 2 3