I have a ListView dynamically inflated with custom layout that has different text views and a button. On button click, a user specifies options in a dialog window and the data returned to the selected item in the list view. 
I expect the data to get inserted in text views of the corresponding item in the list view. However, when the list has fewer item that are not scrollable, no data gets inserted at all when dialog is closed and when it has enough items to be scrollable, the data gets inserted into text views of wrong item in the list. I don't know what I am doing wrong, here is my code:
public double COST_EM = 0.00, COST = 0.00, NUM_CO = 0.00;
private Spinner mPSpinner, mMediSpinner;
private ArrayAdapter<String> pmedi, numCo;
private TextView mPTv, mCoTv, mSubMain, mSubTv;
@Override
        public View getView(final int position, View convertView,
                ViewGroup parent) {
            View view = null;
            LayoutInflater inflater = (LayoutInflater) mContext
                    .getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.item_custom_layout, parent, false);
            // Display image in the ImageView widget
            TempP tphoto = tempPList.get(position);
            mPTv = (TextView) view.findViewById(R.id.p_tv_po);
            mCoTv = (TextView) view.findViewById(R.id.co_tv_po);
            mSubMain = (TextView) view.findViewById(R.id.sub_list);
            mModify = (Button) view.findViewById(R.id.modify_btn_po);
            mModify.setOnClickListener(new View.OnClickListener() {
                // calculate the order cost
                protected void calculateCost() {
                    mSub = ((COST_EM + COST) * NUM_CO);
                    mSubtv.setText("" + Double.toString(mSub));
                }
                @Override
                public void onClick(View v) {
                    mDialog = new Dialog(PCustom.this);
                    mDialog.setContentView(R.layout.item_custom_dialog);
                    mDialog.setTitle("Modify specifications");
                    mPSpinner = (Spinner) mDialog.findViewById(R.id.ces_sp_dialog);
                    mSubTv = (TextView) mDialog.findViewById(R.id.sub_der_dialog);
                    // set spinner adapters (code truncated for brevity)
                    pmedi = new ArrayAdapter<String>(MyApplication
                            .getContext(), R.layout.spinner_style, pmedi);
                    mPSpinner.setAdapter(pmedi);
                    mPSpinner
                            .setOnItemSelectedListener(new OnItemSelectedListener() {
                                public void onItemSelected(AdapterView<?> arg0,
                                        View arg1, int pos, long arg3) {
                                    if (mPSpinner.getSelectedItem() == "Glossy") {
                                        COST = 2000.00;
                                    } else if (mPSpinner
                                            .getSelectedItem() == "Standard") {
                                        COST = 1500.00;
                                    } else if (mPSpinner
                                            .getSelectedItem() == "Other") {
                                        COST = 1000.00;
                                    }
                                    // calculate the cost
                                    calculateCost();
                                }
                                public void onNothingSelected(
                                        AdapterView<?> arg0) {
                                }
                            });
                    Button save = (Button) mDialog
                            .findViewById(R.id.save_btn_po_dialog);
                    Button cancel = (Button) mDialog
                            .findViewById(R.id.cancel_btn_po_dialog);
                    save.setOnClickListener(new View.OnClickListener() {
                        public void onClick(View v) {
                            // String newnumber =
                            // mobileNumber.getText().toString();
                            mPTv.setText("" + mPSpinner
                                    .getSelectedItem());
                            mCoTv.setText((String) mNCoSpinner
                                    .getSelectedItem());
                            mSubMain.setText(Double.toString(mSub));
                            mDialog.dismiss();
                        }
                    });
                    cancel.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            mDialog.dismiss();
                        }
                    });
                    mDialog.show();
                }
            });
            return view;
        }
 
     
    