Arraylist覆盖值问题?

时间:2014-09-01 09:14:47

标签: java android arraylist android-spinner

我有一个Order Item的对象。它包含三个值

1.item名称

2.Item Price

3.没有项目

我有一个微调器,我在选中的项目上添加了这个对象。

当我添加此对象并再次选择时,另一个项目也将添加到列表中,而不是覆盖。

我的代码在

下面
    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);
}

任何人都可以帮助我吗? 我在这里缺少什么?

3 个答案:

答案 0 :(得分: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) {

   }
};

答案 1 :(得分: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函数中,您只需使用arraylist的contains方法

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

答案 2 :(得分: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对象相同时)对于BOTH函数是正确的。

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

我使用AutoGeneration算法为我提供了你可能希望做同样的equals和hashCode函数。而不是复制我的