拖动项目时,StaggeredGridLayoutManager工作不正确

问题描述

我注意到,当所有项目都不再适合整个屏幕时,我尝试将索引为0的项目向下拖动到某个位置,然后它立即跳下多个项目。我已经检查了很多资源,但是哪里都没有解决方案。还有其他选择吗?谷歌保持应用程序显然使用相同的列表,但在那里没有问题。 非常感谢您的帮助

GIF: https://i.imgur.com/mvVxP7r.mp4

代码

   @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

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)