使用RecyclerView在android中拖放
我是android开发新手,我想创建一个具有拖放功能的应用程序。条件是当我拖动一个项目直到我们将该项目拖放到任何位置时,该拖动视图的位置必须为空。我通过ItemTouchHelper解决了同样的问题。理解之后,它虽然有点小,但很复杂,但很简单。假设您有一个名为mRecyclerView的recycleView使用RecyclerView在android中拖放,android,Android,我是android开发新手,我想创建一个具有拖放功能的应用程序。条件是当我拖动一个项目直到我们将该项目拖放到任何位置时,该拖动视图的位置必须为空。我通过ItemTouchHelper解决了同样的问题。理解之后,它虽然有点小,但很复杂,但很简单。假设您有一个名为mRecyclerView的recycleView public void initRecycleView(){ //initiate your recycleView here .... mRecyclerView.setAdap
public void initRecycleView(){
//initiate your recycleView here ....
mRecyclerView.setAdapter(your_recycleView_adapter));
ItemTouchHelper touchHelper = new ItemTouchHelper(rvCallback);
touchHelper.attachToRecyclerView(mRecyclerView);
}
int dragStartFromPosition = -1;
ItemTouchHelper.Callback rvCallback = new ItemTouchHelper.Callback() {
int dragFromPosition = -1;
int dragToPosition = -1;
@Override
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
final int dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT;
//final int swipeFlags = ItemTouchHelper.START | ItemTouchHelper.END;
return makeMovementFlags(dragFlags, 0);
}
@Override
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
if (dragFromPosition == -1) { //For Saving drag start from position
dragStartFromPosition = viewHolder.getAdapterPosition();
}
dragFromPosition = viewHolder.getAdapterPosition();
dragToPosition = target.getAdapterPosition();
moveItem(dragFromPosition, dragToPosition);
dragFromPosition = dragToPosition;
dragToPosition = -1;
return true;
}
@Override
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
super.clearView(recyclerView, viewHolder);
if (dragFromPosition != -1 && dragToPosition != -1 && dragFromPosition != dragToPosition) {
finalMoved(dragFromPosition, dragToPosition);
} else {
moveItem(dragFromPosition, dragStartFromPosition);
dragStartFromPosition = -1;
}
dragFromPosition = dragToPosition = -1;
}
private void finalMoved(int from, int to) {
moveAlertDialog(from, to);
}
@Override
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
}
@Override
public void onChildDrawOver(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
super.onChildDrawOver(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
}
@Override
public boolean isLongPressDragEnabled() {
return true;
}
};
private void moveItem(int from, int to) {
Collections.swap(itemArrayList, from, to);
rvAdapter.notifyItemMoved(from, to);
}
public void moveAlertDialog(final int from, final int to) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Do you want to move this item?");
builder.setPositiveButton("move", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dragStartFromPosition = -1;
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
moveItem(from, dragStartFromPosition);
dragStartFromPosition = -1;
}
});
builder.show();
}
如果遇到任何问题,请随时提问。谢谢如果你想在recycler视图中拖动view而不是refr此链接,你必须解释更多内容以及你已经尝试过的示例。向我们展示一些努力@RishikeshRahi@shohan-艾哈迈德·西扬,实际上,我将视图从一个位置拖到了另一个位置,但问题是..我希望当我没有将它放在某个位置时,将被拖的项目移到它以前的位置。@Mohit Suthar感谢您的帮助。它工作得很好。