1

我有一個包含2個按鈕,1個textview和一個edittext的列表視圖,textview顯示產品的名稱,兩個按鈕( - & +)增加或減少編輯文本中的數量。當我點擊列表視圖的第一行時,我的textchanged監聽器正在啓動一個循環?

對於最後3行(4個),一切正常,它顯示了我在列表中的位置,產品名稱,數量,價格,我需要的一切。但只要我從第一排按下任何一個按鈕,它就會進入9圈循環。我的敬酒在每個烤麪包上顯示一個新的位置,並顯示適當的信息,但數量與第一行的數量不同。

這裏是我的自定義適配器的延伸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個按鈕的listerners同樣的方法:

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"); 
      } 
     } 
    }); 

而且finaly仍處於同樣的方法,我引起此問題的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,但它沒有幫助。

你的幫助是非常讚賞;)

問候,

勒布

回答

0

這是因爲每次 etQuantity.addTextChangedListener再添一個監聽到你的 etQuantity部件。

所以當觀的ListView被重複使用時,只需添加另一個監聽器 etQuantity(而不是取代舊的),而這一切的聽衆將火。嘗試使用例如etQuantity.setOnFocusChangeListener並更新數量 etquality鬆散焦點(也應該添加((NewOrderActivity)活動).updateOrderedProducts(p.getId(),p.getNom(),p.getPrix(),quantite) ;的onClick聽衆的按鈕),而不是 etQuantity.addTextChangedListener

或者,你可以保存你的聽衆在持有人,並呼籲 etQuantity.addTextChangedListener只有一次,當你創建座

相關問題