我想要实现的目标:拥有一个带有GridLayoutManager的RecyclerView,它支持drag'n'drop并在拖动时重新排列项目.
旁注:第一次用拖放开发任何东西.
有很多关于如何使用的ListView来实现这一功能的主题,例如:https://raw.githubusercontent.com/btownrippleman/FurthestProgress/master/FurthestProgress/src/com/anappforthat/android/languagelineup/DynamicListView.java
然而,通常的例子是很多的代码,创建拖累视图的位图和感觉应该可以使用来实现相同的结果View.startDrag(...),并与RecyclerView notifyItemAdded(),notifyItemMoved()而且notifyItemRemoved()因为它们提供了重新排列动画.
所以我玩了一些并想出了这个:
final CardAdapter adapter = new CardAdapter(list);
adapter.setHasStableIds(true);
adapter.setListener(new CardAdapter.OnLongClickListener() {
@Override
public void onLongClick(View view) {
ClipData data = ClipData.newPlainText("","");
View.DragShadowBuilder builder = new View.DragShadowBuilder(view);
final int pos = mRecyclerView.getChildAdapterPosition(view);
final Goal item = list.remove(pos);
mRecyclerView.setOnDragListener(new View.OnDragListener() {
int prevPos = pos;
@Override
public boolean onDrag(View view, DragEvent dragEvent) {
final int action = dragEvent.getAction();
switch(action) {
case DragEvent.ACTION_DRAG_LOCATION:
View onTopOf = mRecyclerView.findChildViewUnder(dragEvent.getX(), dragEvent.getY());
int i …Run Code Online (Sandbox Code Playgroud) android drag-and-drop gridlayoutmanager android-recyclerview