2013-03-15 56 views
0

我想构建一个ArrayAdapter,它将输出一行和该行中该项目的数量。但是,每次都会添加额外的行,从而产生不必要的影响。getView方法无法正常工作 - 添加额外的空白行

我不知道我的逻辑有什么问题,但我相信它确实很小。下面是我的getView()方法:

public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 
    if(v == null){ 
     LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = inflater.inflate(R.layout.order_row, null); 
    } 

    item = dishes.get(position); 
    if(lastItem != null){ 
    if(!lastItem.getName().equals(item.getName())){ 

    dishName = (TextView)v.findViewById(R.id.dishName); 
    dishPrice = (TextView)v.findViewById(R.id.dishPrice); 

    dishName.setText(item.getName()); 
    dishPrice.setText(String.valueOf(item.getPrice())); 

    dishQty = (TextView)v.findViewById(R.id.dishQty); 
    dishQty.setText(String.valueOf(item.getQty())); 
     } 
    } 
    else{ 
     dishName = (TextView)v.findViewById(R.id.dishName); 
     dishPrice = (TextView)v.findViewById(R.id.dishPrice); 

     dishName.setText(item.getName()); 
     dishPrice.setText(String.valueOf(item.getPrice())); 

     dishQty = (TextView)v.findViewById(R.id.dishQty); 
     dishQty.setText(String.valueOf(item.getQty())); 

    } 

    lastItem = item; 
    return v; 

} 

目前我的输出是这样

Chicken  QUANTITY 
2.99   2 

然后,如果我添加一个新的项目数量上升的预期,但它增加了另一行:

DISH NAME  QUANTITY 
DISH PRICE  0 

任何想法,我做错了什么?

列表中的每个产品MenuItem型我增加量是这样的:

public void incQty(){ 
    qty++; 
} 

这是MenuItem数组适配器getView()其中数量是使用增加了NumberPicker

public View getView(final int position, View convertView, ViewGroup parent) { 

    View v = convertView; 
    if (v == null) { 
     LayoutInflater vi = (LayoutInflater) getContext().getSystemService(
       Context.LAYOUT_INFLATER_SERVICE); 
     v = vi.inflate(R.layout.menuitem_row, null); 
     v.setFocusable(true); 
    } 

    // assign values to view 
    final MenuItem item = this.menuItems.get(position); 

    TextView nameView = (TextView) v.findViewById(R.id.item_name); 
    final TextView priceView = (TextView) v.findViewById(R.id.item_price); 

    nameView.setText(item.getName() + " "); 
    priceView.setText("€" + String.valueOf(item.getPrice())); 

    // number picker 
    np = (NumberPicker) v.findViewById(R.id.numpick); 
    np.setMaxValue(20); 
    np.setMinValue(0); 
    np.setValue(0); 
    np.setFocusable(false); 
    // calculation occurs when values are changed... 
    np.setOnValueChangedListener(new OnValueChangeListener() { 
     public void onValueChange(NumberPicker picker, int oldVal, 
       int newVal) { 
      //Add to order - increment price 
      if (newVal > oldVal) { 
       total = (item.getPrice() * newVal) - item.getPrice() 
         * oldVal; 
       Order.getInstance().addToOrder(item); 
       item.incQty(); 
       amount += total; 
       Order.getInstance().setAmount(amount); 
       Toast.makeText(picker.getContext(), "Item Added: " + item.getName() + " Size: " + Order.getInstance().getOrderItems().size(), Toast.LENGTH_SHORT).show(); 
       confirmBtn.setVisibility(View.VISIBLE); 


      } 
      //remove from order - decrement price 
      if (newVal < oldVal) { 
       total = (item.getPrice() * oldVal) - item.getPrice() 
         * newVal; 
       Order.getInstance().removeFromOrder(position); 
       item.decQty(); 
       amount -= total; 
       Order.getInstance().setAmount(amount); 
       Toast.makeText(picker.getContext(), "Item removed: " + item.getName() + " Size: " + Order.getInstance().getOrderItems().size(), Toast.LENGTH_SHORT).show(); 
       if(Order.getInstance().getOrderItems().size() == 0){ 
        confirmBtn.setVisibility(View.INVISIBLE); 
       } 

      } 


      //update the text view price. 
      price.setText("€" + String.valueOf(Order.getInstance().getAmount())); 
     } 
    }); 

    return v; 

} 
+0

你的意思是说,而不是鸡的数量上升到3,一个全新的行被添加? – 2013-03-15 21:21:17

+0

没有鸡的数量会增加到3,但另一行也是每次都会添加空白数据 – Javacadabra 2013-03-15 21:22:11

+0

我不认为问题出在您的适配器代码中,您将不得不提供更多的代码上下文。 – kabuko 2013-03-15 21:23:17

回答

0

你必须检查适配器的getCount()方法。 getCount()方法是确定从getView()方法创建多少行的方法。

例如,如果getCount()返回5,您将在您的列表视图中获得5行。所以请检查你的getCount(),你可以覆盖它,使它返回正确的行数。