/**
   * Returns an editable {@link View} of a requirement.
   *
   * @param viewIndex the index of the requirement
   * @param convertView the old view
   * @param parent the parent view
   * @return the static View
   */
  public View getEditView(int viewIndex, View convertView, ViewGroup parent) {
    View newView;
    if (convertView != null) {
      // Re-use the given view
      newView = convertView;
      // Just ask it to update the position of the Watcher
      RequirementTextWatcher.getWatcher(viewIndex, newView, this);
    } else {
      // Instantiate a new view
      newView = inflater.inflate(R.layout.req_edit_elem, null);
      // Setup the EditText watcher
      ((EditText) newView.findViewById(R.id.reqDescriptionEdit))
          .addTextChangedListener(RequirementTextWatcher.getWatcher(viewIndex, newView, this));
    }
    final Requirement req = (Requirement) getItem(viewIndex);

    ((EditText) newView.findViewById(R.id.reqDescriptionEdit)).setText(req.getDescription());
    // Figure out what Image resource to set
    int resource;
    if (req.getContentType() == contentType.text) {
      resource = R.drawable.txticon;
    } else if (req.getContentType() == contentType.image) {
      resource = R.drawable.imgicon;
    } else if (req.getContentType() == contentType.audio) {
      resource = R.drawable.audicon;
    } else if (req.getContentType() == contentType.video) {
      resource = R.drawable.vidicon;
    } else {
      Log.w("RequirementListAdapter", "Unknown Content Type: " + req.getContentType());
      resource = R.drawable.txticon;
    }
    // Set the image
    ((ImageView) newView.findViewById(R.id.reqContentImg)).setImageResource(resource);

    // Enable the delete button
    ((Button) newView.findViewById(R.id.reqDeleteBtn))
        .setOnClickListener(
            new OnClickListener() {

              public void onClick(View source) {
                task.removeRequirement(req);
                update();
              }
            });

    return newView;
  }
  /**
   * Returns the static (for viewing only) {@link View} of a requirement.
   *
   * @param viewIndex the index of the requirement
   * @param convertView the old view
   * @param parent the parent view
   * @return the static View
   */
  public View getStaticView(int viewIndex, View convertView, ViewGroup parent) {
    View newView;
    if (convertView != null) {
      // Re-use the given view
      newView = convertView;
    } else {
      // Instantiate a new view
      newView = inflater.inflate(R.layout.req_view_elem, null);
    }
    final Requirement req = (Requirement) getItem(viewIndex);

    ((TextView) newView.findViewById(R.id.reqDescriptionText)).setText(req.getDescription());
    // Figure out what Image resource to set
    int resource;
    switch (req.getContentType()) {
      case text:
        resource = R.drawable.txticon;
        break;
      case image:
        resource = R.drawable.imgicon;
        break;
      case audio:
        resource = R.drawable.audicon;
        break;
      case video:
        resource = R.drawable.vidicon;
        break;
      default:
        Log.w("RequirementListAdapter", "Unknown Content Type: " + req.getContentType());
        resource = R.drawable.txticon;
    }
    // Set the image
    ((ImageView) newView.findViewById(R.id.reqContentImg)).setImageResource(resource);

    // Set Fulfillment handler
    ((Button) newView.findViewById(R.id.reqFulfillBtn))
        .setOnClickListener(
            new OnClickListener() {
              public void onClick(View source) {
                openFulfillmentActivity(req);
              }
            });

    return newView;
  }