2014-09-01 125 views
1

我有秩序的Items.it包含3个值Arraylist覆盖值问题?

1.item名称

2.Item价格的项目

我有一个微调,我有

3.No对象在选择的项目上添加此对象。

当我添加这个对象,并再次选择,其他项目它也将添加到列表中,不覆盖。

我的代码如下

private OnItemSelectedListener itemSelectListener = new OnItemSelectedListener() { 


    @Override 
    public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) { 
     // TODO Auto-generated method stub 


     System.out.println("parent Tag:"+arg0.getTag()); 
     TextView itemName = (TextView)findViewById(Integer.parseInt(arg0.getTag().toString())); 
     System.out.println("Item Name:" +itemName.getText().toString()); 
     System.out.println("Item Price:" +itemName.getTag().toString()); 
     System.out.println("Item QTY:" +arg0.getItemAtPosition(arg2).toString()); 
     orderItems = new OrderItems();   
     if(!"".equals(arg0.getItemAtPosition(arg2).toString())){ 
      orderItems.itemName = itemName.getText().toString(); 
      orderItems.itemPrice = itemName.getTag().toString(); 
      orderItems.noOfItems = Integer.parseInt(arg0.getItemAtPosition(arg2).toString()); 
      //if(itemsArray) 
      itemsArray.additem(orderItems); 
     } 

    } 

    @Override 
    public void onNothingSelected(AdapterView<?> arg0) { 
     // TODO Auto-generated method stub 

    } 
}; 

public void additem(OrderItems object){ 
    itemArrayList.add(object); 
} 

任何机构可以帮助我在这? 我在这里错过了什么?

+0

'itemsArray.additem(orderItems);',你想添加'orderItems'吧? – 2014-09-01 09:18:21

+0

@SURESH ATTA我想检查所选项目是否已经存在,然后覆盖它 – Nadeem 2014-09-01 09:20:25

+0

@Caleryn我已编辑我的问题,你可以检查出来。 public void additem(OrderItems object){ \t \t itemArrayList.add(object); \t} 这是我的代码 – Nadeem 2014-09-01 09:22:37

回答

1

试试这种方式,希望这会帮助你解决你的问题。

HashMap<Integer,Object> hashMap = new HashMap<Integer, Object>(); 
private OnItemSelectedListener itemSelectListener = new OnItemSelectedListener() { 

    @Override 
    public void onItemSelected(AdapterView<?> arg0, View arg1,int arg2, long arg3) { 
     System.out.println("parent Tag:"+arg0.getTag()); 
     TextView itemName = (TextView)findViewById(Integer.parseInt(arg0.getTag().toString())); 
     System.out.println("Item Name:" +itemName.getText().toString()); 
     System.out.println("Item Price:" +itemName.getTag().toString()); 
     System.out.println("Item QTY:" +arg0.getItemAtPosition(arg2).toString()); 
     orderItems = new OrderItems(); 
     if(!"".equals(arg0.getItemAtPosition(arg2).toString())){ 
      orderItems.itemName = itemName.getText().toString(); 
      orderItems.itemPrice = itemName.getTag().toString(); 
      orderItems.noOfItems = Integer.parseInt(arg0.getItemAtPosition(arg2).toString()); 
      hashMap.put(arg2,orderItems); 
     } 
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> arg0) { 

    } 
}; 
+0

感谢它帮助我解决我的问题。 – Nadeem 2014-09-01 09:40:55

+0

很高兴帮助您,请您注意是否对您有用? – 2014-09-01 09:42:23

+0

我试图upvote,但我有较少的声誉。 但我已经做了接受的答案。对不起,upvote – Nadeem 2014-09-01 09:44:52

0

如果要检查,如果所选择的项目是已经在你需要重写equals and hashcode功能在OrderItemsitemArrayList

class OrderItems{ 

//your methods 

@Override 
    public boolean equals(Object obj) { 
     // TODO Auto-generated method stub 
     if (this == obj) 
      return true; 

     if (obj == null || (this.getClass() != obj.getClass())) { 
      return false; 
     } 
     OrderItems order = (OrderItems) obj; 
     return this.itemName.equals(order.getItemName()) 
       && this.itemPrice.equals(order.getItemPrice()) 
       && this.noOfItems.equals(order.getNoOfItems()); 
    } 

    @Override 
    public int hashCode() { 
     // TODO Auto-generated method stub 
     return itemName != null ? itemName.hashCode() : 0; 
    } 
} 

然后在onItemSelected功能你可以使用的的contains方法arraylist

  orderItems = new OrderItems(); 

     if(!itemArrayList.contains(arg0.getItemAtPosition(arg2))){ 
      orderItems.itemName = itemName.getText().toString(); 
      orderItems.itemPrice = itemName.getTag().toString(); 
      orderItems.noOfItems = Integer.parseInt(arg0.getItemAtPosition(arg2).toString()); 
      //if(itemsArray) 
      itemsArray.additem(orderItems); 
     } 
0

如果你声明itemArrayList

Set<OrderItems> itemArrayList = new HashSet<>(); 

以下两种方法或等价取决于你的需求应该存在于对象的OrderItems。

@Override 
public int hashCode() { 
    int hash = 43 * 3 + (this.itemName != null ? this.itemName.hashCode() : 0); 
    hash = 43 * hash + (this.itemPrice != null ? this.itemPrice.hashCode() : 0); 
    return 43 * hash + this.noOfItems; 
} 

@Override 
public boolean equals(Object obj) { 
    if (this == obj){ 
     return true; 
    } 
    if (obj == null || getClass() != obj.getClass()) { 
     return false; 
    } 
    final OrderItems other = (OrderItems) obj; 
    if ((this.itemName == null) ? (other.itemName != null) : !this.itemName.equals(other.itemName)) { 
     return false; 
    } 
    if (this.itemPrice != other.itemPrice && (this.itemPrice == null || !this.itemPrice.equals(other.itemPrice))) { 
     return false; 
    } 
    return this.noOfItems == other.noOfItems; 
} 

我已经包含在这两种情况下,所有领域调整这两种方法,使您的平等条件(是当一个物体的OrderItems是相同的)是两种功能是正确的。

你其余的r代码应该接近不变。

我使用AutoGeneration算法来给我equals和hashCode函数,你可能希望做同样的事情。而不是复制我的