1

私は2つのボタン、1つのテキストビューと1つの編集テキストを備えたリストビューを持っています。テキストビューには製品の名前が表示され、2つのボタン(-と+)は編集テキストにある数量を増減します。

最後の 3 行 (4 つのうち) ですべてが正常に機能しており、リストの位置、製品の名前、数量、価格、必要なものがすべて表示されます。しかし、最初の行のボタンのいずれかを押すとすぐに、9 ラップのループになります..私のトーストは、最初の行の 1 つに固執する量を除いて、適切な情報を含む各トーストで新しい位置を示しています。

これは、BaseAdapter を拡張するカスタム アダプターの getView です。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    if (convertView == null){
        convertView = inflater.inflate(R.layout.one_product, null);
    }

    final int pos = position;
    Button btnProdChoiMinus = (Button)convertView.findViewById(R.id.btnProdChoiMinus);
    TextView tvProduit = (TextView)convertView.findViewById(R.id.tvProduct);
    Button btnProdChoiPlus = (Button)convertView.findViewById(R.id.btnProdChoiPlus);
    final EditText etQuantity = (EditText)convertView.findViewById(R.id.etQuantite);

    final Produit p= data.get(position);

    btnProdChoiMinus.setText(convertView.getResources().getString(R.string.lblMinus));
    tvProduit.setText(p.getNom());
    btnProdChoiPlus.setText(convertView.getResources().getString(R.string.lblPlus));

同じ方法で、2 つのボタン リスターナーがあります。

btnProdChoiMinus.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            if (etQuantity.getText().toString().length() != 0){
                quantite = Integer.parseInt(etQuantity.getText().toString()) - 1;
                if (quantite > 0){
                    etQuantity.setText("" + quantite);
                }else{
                    etQuantity.setText("");
                }

            }else{
                Toast.makeText(context, R.string.lblErrQuantity_fr, Toast.LENGTH_SHORT).show();
            }
        }
    });

    btnProdChoiPlus.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            if (etQuantity.getText().toString().length() != 0){
                quantite = Integer.parseInt(etQuantity.getText().toString()) + 1;
                etQuantity.setText("" + quantite);

            }else{
                etQuantity.setText("1");
            }
        }
    });

最後に、同じ方法で、この問題を引き起こしている私の textchanged リスター:

etQuantity.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                // TODO Auto-generated method stub

            }

            @Override
            public void afterTextChanged(Editable s) {

                if (etQuantity.getText().toString().length() != 0){

                    quantite = Integer.parseInt(etQuantity.getText().toString());

                    Toast.makeText(context, "Position: " + pos + " Produit: " + p.getNom() + " id: " + p.getId() + " Prix: " + p.getPrix() + " Quantité: " + quantite, Toast.LENGTH_SHORT).show();
                    //((NewOrderActivity)activity).updateOrderedProducts(p.getId(), p.getNom(), p.getPrix(), quantite);
                }
            }
        });


        return convertView;
    }

私はすでに afterTextChanged から onTextChanged に切り替えようとしましたが、役に立ちませんでした。

あなたの助けは大歓迎です;)

よろしく、

セブ

4

1 に答える 1