2017-02-07 20 views
2
public class ItemCallBack extends ItemTouchHelper.Callback { 
private BaseDragAdapter adapter; 
private List list; 

public ItemCallBack(BaseDragAdapter adapter, List list) { 
    this.adapter = adapter; 
    this.list = list; 
} 

@Override 
public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { 
    int dragFlags = 0; 
    int swipeFlags = 0; 
    int startPosition = viewHolder.getAdapterPosition(); 
    if (startPosition != 0) { 
     if (recyclerView.getLayoutManager() instanceof GridLayoutManager) { 
      dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; 
     } else if (recyclerView.getLayoutManager() instanceof LinearLayoutManager) { 
      dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN; 
     } else if (recyclerView.getLayoutManager() instanceof StaggeredGridLayoutManager) { 
      dragFlags = ItemTouchHelper.UP | ItemTouchHelper.DOWN | ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT; 
     } 
    } 
    return makeMovementFlags(dragFlags, swipeFlags); 
} 

@Override 
public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) { 
    int startPosition = viewHolder.getAdapterPosition(); 
    int targetPosition = target.getAdapterPosition(); 
    adapter.onMoved(startPosition, targetPosition); 
    return true; 
} 

@Override 
public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { //左右拖動刪除 
    int position = viewHolder.getAdapterPosition(); 
    adapter.onSwiped(position); 
} 

@Override 
public boolean isLongPressDragEnabled() { 
    return true; 
} 

@Override 
public boolean isItemViewSwipeEnabled() { 
    return false; 
} 


@Override 
public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) { 
    if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) { 
     viewHolder.itemView.setScaleX(1.2f); 
     viewHolder.itemView.setScaleY(1.2f); 
    } 
    super.onSelectedChanged(viewHolder, actionState); 
} 

@Override 
public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) { 
    super.clearView(recyclerView, viewHolder); 
    viewHolder.itemView.setScaleX(1.0f); 
    viewHolder.itemView.setScaleY(1.0f); 
    onOrderListener.order(); 
} 


@Override 
public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { 
    super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); 
} 

private OnOrderListener onOrderListener; 

public void setOnPictureClickListener(OnOrderListener onOrderListener) { 
    if (onOrderListener != null) { 
     this.onOrderListener = onOrderListener; 
    } 
} 

public interface OnOrderListener { 
    void order(); 
} 

}ItemTouchHelper與多ViewType

@Override 
public int getItemViewType(int position) { 
    if (position == 0) { 
     return TYPE_ADD; 
    } else if (position == 1) { 
     return TYPE_COVER; 
    } 
    return TYPE_NORMAL; 
} 

@Override 
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    if (viewType == TYPE_ADD) { 
     View view = LayoutInflater.from(context).inflate(R.layout.item_upload_pic_add, null); 
     return new AddHolder(view); 
    } else if (viewType == TYPE_COVER) { 
     View view = LayoutInflater.from(context).inflate(R.layout.item_upload_pic_cover, null); 
     return new CoverHolder(view); 
    } else { 
     View view = LayoutInflater.from(context).inflate(R.layout.item_upload_pic_normal, null); 
     return new NormalHolder(view); 
    } 
} 

我想和ItemTouchHelper交換項目。

的問題是:

當我拖動和viewtype交換產品TYPE_NORNAL,動畫作品好;
但是當我嘗試切換不同類型(例如:TYPE_NORMAL和TYPE_COVER)時,動畫無法正確執行。

如何使動畫正確執行?

回答

0

我有同樣的問題。通過設置消除它

setHasStableIds(true);

對適配器,並重寫getItemId(),以便它爲適配器中的每個項目返回唯一的ID。如果你沒有獨特的物品id,你可以生成Map並在獲得適配器的新物品時生成這些ID。然後使用item作爲關鍵字,在getItemId()中查找這些id。

+0

謝謝@ southerton,我會試試看。 –

+0

@southerton你能告訴你如何實現你的答案。我添加了setHasStableIds(true)並且具有唯一的ID,但是當我試圖拖放我的視圖並且消失時。但沒有多種視圖類型工作正常。謝謝 – drod

相關問題