2014-09-01 2 views
1

У меня есть объект ордена Items.it содержит три значенияПроблема с переопределением 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' право? –

+0

@SURESH ATTA Я хочу проверить, существует ли уже выбранный элемент, а затем переопределить его – Nadeem

+0

@Caleryn У меня есть свой вопрос, который вы можете проверить. public void additem (объект OrderItems) { \t \t itemArrayList.add (объект); \t} это мой код – Nadeem

ответ

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

+0

Рад помочь вам разобраться, если это вам полезно? –

+0

Я попытался подняться, но у меня меньше репутации. Но я сделал как принятый ответ. извините за upvote – Nadeem

0

если вы хотите проверить, если выбранный элемент уже в itemArrayList вам нужно переопределить функцию equals and hashcode в вашем OrderItems классе

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<>(); 

Следующих два метода или их эквиваленты, зависящих от ваших потребностей должны существовать на ТоварыЗаказе объект.

@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; 
} 

Я включил все поля в обоих случаях корректировать оба метода, так что ваше состояние равенства (это когда объект ТоварыЗаказа то же самое) справедливо для обеих функций.

остаток от вас код r должен быть близок к неизменному.

Я использовал алгоритм AutoGeneration, чтобы дать мне функции equals и hashCode, которые вы, возможно, захотите сделать так же. вместо копирования my

Смежные вопросы