@Override
  public void onBindViewHolder(VH holder, int position) {
    if (isDragging()) {
      final long itemId = holder.getItemId();

      final int origPosition =
          convertToOriginalPosition(
              position, mDraggingItemInitialPosition, mDraggingItemCurrentPosition);

      if (itemId == mDraggingItemId && holder != mDraggingItem) {
        if (mDraggingItem == null) {
          if (LOCAL_LOGI) {
            Log.i(TAG, "a new view holder object for the currently dragging item is assigned");
          }
          mDraggingItem = holder;
          mDragDropManager.onNewDraggingItemViewBinded(holder);
        } else {
          Log.e(TAG, "an another view holder object for the currently dragging item is assigned");
        }
      }

      int flags = RecyclerViewDragDropManager.STATE_FLAG_DRAGGING;

      if (itemId == mDraggingItemId) {
        flags |= RecyclerViewDragDropManager.STATE_FLAG_IS_ACTIVE;
      }
      if (mDraggableRange.checkInRange(position)) {
        flags |= RecyclerViewDragDropManager.STATE_FLAG_IS_IN_RANGE;
      }

      safeUpdateFlags(holder, flags);
      super.onBindViewHolder(holder, origPosition);
    } else {
      safeUpdateFlags(holder, 0);
      super.onBindViewHolder(holder, position);
    }
  }