Ответ 1
Начните с добавления draglistener в ваше раздутое представление в onCreateViewHolder
вашего адаптера onCreateViewHolder
.
view.setOnDragListener(new OnDragListener() {
@Override
public boolean onDrag(View view, DragEvent dragEvent) {
switch (dragEvent.getAction()) {
case DragEvent.ACTION_DRAG_STARTED:
// drag has started, return true to tell that you're listening to the drag
return true;
case DragEvent.ACTION_DROP:
// the dragged item was dropped into this view
Category a = items.get(getAdapterPosition());
a.setText("dropped");
notifyItemChanged(getAdapterPosition());
return true;
case DragEvent.ACTION_DRAG_ENDED:
// the drag has ended
return false;
}
return false;
}
});
В случае ACTION_DROP
вы можете либо изменить модель и вызвать notifyItemChanged()
, либо напрямую изменить представление (которое не будет обрабатывать случай повторного связывания). Также в onCreateViewHolder
добавьте longClickListener
к вашему View
, а в onLongClick
запустите перетаскивание:
ClipData.Item item = new ClipData.Item((CharSequence) view.getTag());
String[] mimeTypes = {ClipDescription.MIMETYPE_TEXT_PLAIN};
ClipData dragData = new ClipData(view.getTag().toString(),
mimeTypes, item);
view.setVisibility(View.GONE);
DragShadowBuilder myShadow = new DragShadowBuilder(view);
if (VERSION.SDK_INT >= VERSION_CODES.N) {
view.startDragAndDrop(dragData, myShadow, null, 0);
} else {
view.startDrag(dragData, myShadow, null, 0);
}
Для получения дополнительной информации о перетаскивании проверить сайт разработчиков Android