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