@Override
 public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
   if (hero.getPurse() != null) {
     PurseUnit unit = (PurseUnit) picker.getTag();
     if (unit != null) {
       hero.getPurse().setCoins(unit, newVal);
     }
   }
 }
 /*
  * (non-Javadoc)
  *
  * @see android.widget.AdapterView.OnItemSelectedListener#onItemSelected(android .widget.AdapterView,
  * android.view.View, int, long)
  */
 @Override
 public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
   if (hero.getPurse() != null) {
     Currency cur = (Currency) parent.getItemAtPosition(position);
     if (cur != hero.getPurse().getActiveCurrency()) {
       hero.getPurse().setActiveCurrency(cur);
       notifyDataSetChanged();
     }
   }
 }
  protected View prepareView(PurseListable item, int position, View convertView, ViewGroup parent) {
    PurseViewHolder holder = (PurseViewHolder) convertView.getTag();

    Currency currency = item.getCurrency();
    if (currency == null) {
      currency = hero.getPurse().getActiveCurrency();

      SpinnerSimpleAdapter<Currency> currencyAdapter =
          new SpinnerSimpleAdapter<Currency>(getContext(), Currency.values());
      holder.currencySpinner.setOnItemSelectedListener(null);
      holder.currencySpinner.setAdapter(currencyAdapter);
      holder.currencySpinner.setSelection(currencyAdapter.getPosition(currency));
      holder.currencySpinner.setOnItemSelectedListener(onPurseItemSelectedListener);
      holder.currencySpinner.setVisibility(View.VISIBLE);
      holder.header.setVisibility(View.GONE);
    } else {
      holder.currencySpinner.setVisibility(View.GONE);
      holder.currencySpinner.setOnItemSelectedListener(null);
      holder.header.setVisibility(View.VISIBLE);
      holder.header.setText(currency.xmlName());
    }

    List<PurseUnit> units = currency.units();
    for (int i = 0; i < units.size(); i++) {
      holder.picker[i].setVisibility(View.VISIBLE);
      holder.picker[i].setTag(units.get(i));
      holder.picker[i].setMinValue(0);
      if (i == 0) holder.picker[i].setMaxValue(999);
      else holder.picker[i].setMaxValue(100);

      holder.picker[i].setValue(hero.getPurse().getCoins(units.get(i)));
      holder.picker[i].setOnValueChangedListener(onPurseValueChangeListener);

      holder.labels[i].setVisibility(View.VISIBLE);
      holder.labels[i].setText(units.get(i).xmlName());
    }

    for (int i = units.size(); i < 4; i++) {
      holder.picker[i].setVisibility(View.GONE);
      holder.picker[i].setTag(null);
      holder.labels[i].setVisibility(View.GONE);
    }

    return convertView;
  }