title: setOnClickListener Inside Adapter with ViewHolder Pattern fail
body: <p>I have a issue that with <code>OnClickListener()</code> Event. </p>
  
  <p>The data or variable for each itemlist in each button view gave a mismatch value.</p>
  
  <p>Further more, I test position that was given by print out some Log.</p>
  
  <p>It show that position was mismatch according to the item row (maybe this is because recycle of view)</p>
  
  <p>So, the below is my implementation of my adapter class and please help me identify it.</p>
  
  <p>Please give me a guide and appropriate way to solve this problem.</p>
  
  <p><strong>MyAdapter.Class</strong></p>
  
  <pre><code>private List&lt;Result&gt; results;
  
  public ManifestAdapter(Context context, int view, List&lt;Result&gt; results) {
      super(context, view, results);
      this.results = results;
      this.context = context;
  
      sSave = context.getResources().getString(R.string.complete);
      sCancel = context.getResources().getString(R.string.cancel);
      sEditData = context.getResources().getString(R.string.edit_data);
      colorShipping = context.getResources().getColor(R.color.status_shipping);
      colorShippingComplete = context.getResources().getColor(R.color.status_shipping_complete);
      colorShippingIncomplete = context.getResources().getColor(R.color.status_shipping_incomplete);
  }
  
  @Override
  public Result getItem(int position) {
      return results.get(position);
  }
  
  
  
  public View getView(final int position, View convertView, ViewGroup parent) {
  
          int pos = position;
          ViewHolder holder = null;
  
      if (convertView == null){
          LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
          convertView = inflater.inflate(R.layout.listitem_manifest, null);
  
          holder = new ViewHolder();
          holder.front = (RelativeLayout) convertView.findViewById(R.id.front);
          holder.qrcode = (TextView) convertView.findViewById(R.id.qrcode);
          holder.amount = (TextView) convertView.findViewById(R.id.amount);
          holder.customer = (TextView) convertView.findViewById(R.id.customer);
          holder.address = (TextView) convertView.findViewById(R.id.receiverAddress);
          holder.btnTel  = (Button) convertView.findViewById(R.id.receiverTel);
          holder.btnMap = (Button) convertView.findViewById(R.id.district);
          convertView.setTag(holder);
      } else {
          holder = (ViewHolder) convertView.getTag();
      }
  
      final Result result = getItem(position);
  
  
      .....
      .....
      .....
  
  
      // setup call
      if (result.getReceiverTel() != null) {
          if (!result.getReceiverTel().equals("")) {
              holder.btnTel.setText(result.getReceiverTel().trim());
              holder.btnTel.setTag(position);
              holder.btnTel.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      int pos = (Integer)v.getTag();
                      String uri = "tel:" + getItem(pos).getReceiverTel().trim();
                      Intent iCall = new Intent(Intent.ACTION_DIAL);
                      iCall.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                      iCall.setData(Uri.parse(uri));
                      context.startActivity(iCall);
                  }
              });
          }
      }
      return convertView;
  }
  
  private static class ViewHolder{
      RelativeLayout front;
      TextView qrcode;
      TextView amount;
      TextView customer;
      TextView address;
      Button btnTel;
      Button btnMap;
      int position;
  }
  </code></pre>