问题描述
我注意到,当所有项目都不再适合整个屏幕时,我尝试将索引为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 (将#修改为@)