0

私は、異なるテキストビューボタンListViewを持つカスタムレイアウトで動的に膨らませています。ボタンをクリックすると、ユーザーはダイアログ ウィンドウでオプションを指定し、リスト ビューで選択した項目にデータが返されます。

リスト ビュー内の対応するアイテムのテキスト ビューにデータが挿入されることを期待しています。ただし、リストにスクロールできないアイテムが少ない場合、ダイアログが閉じられたときにデータがまったく挿入されず、スクロール可能なアイテムが十分にある場合、リスト内の間違ったアイテムのテキスト ビューにデータが挿入されます。何が間違っているのかわかりません。ここに私のコードがあります:

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;
        }
4

1 に答える 1