我有一个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);
}
任何人都可以帮助我吗? 我在这里缺少什么?
答案 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函数。而不是复制我的