2014-09-01 95 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函數,你可能希望做同樣的事情。而不是複製我的