以前我们的需求是:当我们对实体类选中checkBox时,加入list里执行add()方法,取消时,则在list移除,执行remove()方法,它们操作的是同一个实体对象。
现在我们的需求是:我们选中checkBox时,取它的部分属性加入另外的实体对象,没选中则移除。
一、在adapter里定义接口,在activity里实现接口setItemSelect();
private Set<OrderDestBean> selectList=new HashSet();
@Override
public void setItemSelect(ShopcarBean shopCar) {
OrderDestBean bean = new OrderDestBean();
bean.setAmount(shopCar.getCash());
bean.setNum(shopCar.getNum());
if (shopCar.isSelect()) {
selectList.add(bean);
cashId.add(shopCar.getId());
accountAll += Integer.parseInt(bean.getAmount());
} else {
accountAll -= Integer.parseInt(bean.getAmount());
selectList.remove(bean);
cashId.remove(shopCar.getId());
}
}
这样,我们移除OrderDestBean时,会移除不掉,而且会增加相同的元素,因为我们每次都重新new了一个OrderDestBean对象,他们操作的不是同一个对象,按照之前的想法,我会想到遍历list了,现在有了一种新的思路,新的方法可以实现,那就是重写OrderDestBean 的equal()、hasCode()方法。
@Override
public int hashCode() {
// return 12345;
final int prime = 31;
int result = 1;
result = prime * result + ((this.num == null) ? 0 : this.num.hashCode());
return result;
}
@Override
public boolean equals(Object o) {
if(o.getClass()!=OrderDestBean.class){
return false;
}
OrderDestBean obj=(OrderDestBean)o;
if(this.num.equal(obj.getNum())){
return true;
}
retrurn false;
}
这样就完美的解决了上面所说的问题。