@SuppressWarnings("unchecked")
  public IAnswerData getAnswer() {
    Vector<Selection> ve = new Vector<Selection>();
    Enumeration en = mItems.keys();
    String k = null;
    String v = null;

    // counter for offset
    int i = 0;
    while (en.hasMoreElements()) {
      k = (String) en.nextElement();
      v = (String) mItems.get(k);
      CheckBox c = ((CheckBox) findViewById(CHECKBOX_ID + i));
      if (c.isChecked()) {
        ve.add(new Selection(v));
      }
      i++;
    }

    if (ve.size() == 0) {
      return null;
    } else {
      return new SelectMultiData(ve);
    }
  }
  public void clearAnswer() {
    int j = mItems.size();
    for (int i = 0; i < j; i++) {

      // no checkbox group so find by id + offset
      CheckBox c = ((CheckBox) findViewById(CHECKBOX_ID + i));
      if (c.isChecked()) {
        c.setChecked(false);
      }
    }
  }
  @SuppressWarnings("unchecked")
  public void buildView(final PromptElement prompt) {
    mItems = prompt.getSelectItems();

    setOrientation(LinearLayout.VERTICAL);

    Vector ve = new Vector();
    if (prompt.getAnswerValue() != null) {
      ve = (Vector) prompt.getAnswerObject();
    }

    if (prompt.getSelectItems() != null) {
      OrderedHashtable h = prompt.getSelectItems();
      Enumeration en = h.keys();
      String k = null;
      String v = null;

      // counter for offset
      int i = 0;

      while (en.hasMoreElements()) {

        k = (String) en.nextElement();
        v = (String) h.get(k);

        // no checkbox group so id by answer + offset
        CheckBox c = new CheckBox(getContext());

        // when clicked, check for readonly before toggling
        c.setOnCheckedChangeListener(
            new CompoundButton.OnCheckedChangeListener() {
              public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (!mCheckboxInit && prompt.isReadonly()) {
                  if (buttonView.isChecked()) {
                    buttonView.setChecked(false);
                  } else {
                    buttonView.setChecked(true);
                  }
                }
              }
            });

        c.setId(CHECKBOX_ID + i);
        c.setText(k);
        c.setTextSize(TypedValue.COMPLEX_UNIT_PT, GlobalConstants.APPLICATION_FONTSIZE);

        for (int vi = 0; vi < ve.size(); vi++) {
          // match based on value, not key
          if (v.equals(((Selection) ve.elementAt(vi)).getValue())) {
            c.setChecked(true);
            break;
          }
        }

        c.setFocusable(!prompt.isReadonly());
        c.setEnabled(!prompt.isReadonly());
        addView(c);
        i++;
      }
    }

    mCheckboxInit = false;
  }