当我们需要对一个实体类bean进行选择判断,我们一般用checkBox来做监听,根据网络请求传递一个存放不同的实体id的jsonArray()数组。
以前我一般的思路:给bean多加一个boolean型的属性isSelect,标记bean选择的状态。声明一个存放id类型的selectList数组,如果isSelect为true,将选中的id先遍历一遍selectList,如果selectList里含有此id,就退出循环,如果没有就加进去,保证不加重复的id,一个数组还好,如果再加一个取消的操作,你还得在加一个取消的数值cancelList,然后再进行判断,挺麻烦,挺绕的。
现在,有了一个好的思路:用Set集合来存放id,它有唯一性,你可以不用自己去判断重复没重复。
一、下边我来展示一下主要的代码
private Set<String> selectSet;// 选中的item
private Set<String> cancelSet;// 取消的item
selectSet = new HashSet<String>();
cancelSet = new HashSet<String>();
// adapter给出的监听接口
@Override
public void setItemSelect(MonthVisitShopInfo shopInfo) {
String itemId = String.valueOf(shopInfo.getMonthsdId());
if (shopInfo.isSelect()) {// 选中
if (shopInfo.getUsed() == 0) {
selectSet.add(itemId);
}
//如果cancelSet没有这个item的话,也不会报错的
cancelSet.remove(itemId);
} else {// 取消
selectSet.remove(itemId);
if (shopInfo.getUsed() == 1) {
cancelSet.add(itemId);
}
}
}
二、在这里提供一下把 将Set数组转换成JSONArray的方法
/**
* 将Set<>()转换成JSONArray
* **/
public void toArray(Collection<String> list, JSONArray array) {
if (null != list && list.size() > 0) {
for (String item : list) {
array.put(item);
}
}
}