微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决拖动项目时,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 举报,一经查实,本站将立刻删除。