功能购物车:在这里没有使用checkbox,直接使用图片点击事件。
布局,我这个是自定义的,在上一个博客:
<com.jz.st.shutuprojects.layout.MyGridView
android:id="@+id/shopping_gv_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/orderallitem_tv_style"
android:numColumns="1"
android:paddingLeft="@dimen/size_24px"
android:paddingRight="@dimen/size_24px"></com.jz.st.shutuprojects.layout.MyGridView>
设置数据:
shoppingAdapter = new ShoppingAdapter(context, obj.getData().getList());
shopping_gv_list.setAdapter(shoppingAdapter);
适配器(在这里还是进行存储,把用户点击的商品存起来,反选删除,键值对(position,boolean)):
(check:是点击后图片
check:是取消点击图片
reduce:加商品
plus:减商品
count:商品唯一识别码(购买删除使用到)
countPrice:商品价格,改变总价
updateQuantity:更改数量
getUpdateData:更新数据
)
public class ShoppingAdapter extends BaseAdapter {
// 定义Context
private Context mContext;
private List<ShoppingCartDto> list;
PricePatternDto obj;
List<Integer> count;
List<Integer> countPrice;
int totalPrice1 = 0;
private List<Integer> checkBoxList = new ArrayList<>();
private Map<Integer, Boolean> map = new HashMap<>();// 存放已被选中的CheckBox
public ShoppingAdapter(Context c, List<ShoppingCartDto> list) {
this.mContext = c;
this.list = list;
}
// 获取图片的个数
public int getCount() {
return list.size();
}
// 获取图片在库中的位置
public Object getItem(int position) {
return list.get(position);
}
// 获取图片ID
public long getItemId(int position) {
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
//如果view未被实例化过,缓存池中没有对应的缓存
ViewHolder viewHolder;
if (convertView == null) {
viewHolder = new ViewHolder();
// 由于我们只需要将XML转化为View,并不涉及到具体的布局,所以第二个参数通常设置为null
convertView = LayoutInflater.from(mContext).inflate(R.layout.adapter_shopping, null);
//对viewHolder的属性进行赋值
viewHolder.name = (TextView) convertView.findViewById(R.id.adapter_tv_shopping_name);
viewHolder.check = (ImageView) convertView.findViewById(R.id.adapter_cb_shopping_check);
viewHolder.photo = (ImageView) convertView.findViewById(R.id.adapter_iv_shopping_photo);
viewHolder.time = (TextView) convertView.findViewById(R.id.adapter_tv_shopping_time);
viewHolder.price = (TextView) convertView.findViewById(R.id.adapter_tv_shopping_price);
viewHolder.reduce = (TextView) convertView.findViewById(R.id.adapter_tv_shopping_reduce);
viewHolder.count = (TextView) convertView.findViewById(R.id.adapter_tv_shopping_count);
viewHolder.plus = (TextView) convertView.findViewById(R.id.adapter_tv_shopping_plus);
viewHolder.check2 = (ImageView) convertView.findViewById(R.id.adapter_cb_shopping_check2);
//通过setTag将convertView与viewHolder关联
convertView.setTag(viewHolder);
} else {//如果缓存池中有对应的view缓存,则直接通过getTag取出viewHolder
viewHolder = (ViewHolder) convertView.getTag();
}
if (StringUtil.isNotEmpty(list.get(position).getCoverImage())) {
Glide.with(mContext).load(InterfaceClass.IMAGSERVER + list.get(position).getCoverImage()).asBitmap().into(viewHolder.photo);
} else {
viewHolder.photo.setImageResource(R.mipmap.img_tx);
}
viewHolder.photo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Map map = new HashMap();
map.put("productCode", list.get(position).getProductCode());
startActivity(mContext, DetailsActivity.class, map);
}
});
if (map.get(position) != null) {
if (map.get(position) == true) {
viewHolder.check.setVisibility(View.GONE);
viewHolder.check2.setVisibility(View.VISIBLE);
} else {
viewHolder.check.setVisibility(View.VISIBLE);
viewHolder.check2.setVisibility(View.GONE);
}
} else {
viewHolder.check.setVisibility(View.VISIBLE);
viewHolder.check2.setVisibility(View.GONE);
}
viewHolder.check.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (map.get(position) != null) {
if (map.get(position) == false) {
map.put(position, true);
totalPrice1 = totalPrice1 + countPrice.get(position);
checkBoxList.add(position);
viewHolder.check.setVisibility(View.GONE);
viewHolder.check2.setVisibility(View.VISIBLE);
} else {
map.put(position, false);
totalPrice1 = totalPrice1 - countPrice.get(position);
for (int i = 0; i < checkBoxList.size(); i++) {
if (position == checkBoxList.get(i)) {
checkBoxList.remove(i);
}
}
isSelectedAll = true;
shopping_cb_all.setImageResource(R.mipmap.icon_nor);
viewHolder.check.setVisibility(View.VISIBLE);
viewHolder.check2.setVisibility(View.GONE); }
} else {
map.put(position, true);
totalPrice1 = totalPrice1 + countPrice.get(position);
checkBoxList.add(position);
viewHolder.check.setVisibility(View.GONE);
viewHolder.check2.setVisibility(View.VISIBLE);
}
shopping_tv_totalprice.setText(String.valueOf(totalPrice1));
}
});
viewHolder.check2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (map.get(position) != null) {
if (map.get(position) == false) {
map.put(position, true);
totalPrice1 = totalPrice1 + countPrice.get(position);
checkBoxList.add(position);
viewHolder.check.setVisibility(View.GONE);
viewHolder.check2.setVisibility(View.VISIBLE);
} else {
map.put(position, false);
totalPrice1 = totalPrice1 - countPrice.get(position);
for (int i = 0; i < checkBoxList.size(); i++) {
if (position == checkBoxList.get(i)) {
checkBoxList.remove(i);
}
}
isSelectedAll = true;
shopping_cb_all.setImageResource(R.mipmap.icon_nor);
viewHolder.check.setVisibility(View.VISIBLE);
viewHolder.check2.setVisibility(View.GONE); }
} else {
map.put(position, true);
totalPrice1 = totalPrice1 + countPrice.get(position);
checkBoxList.add(position);
viewHolder.check.setVisibility(View.GONE);
viewHolder.check2.setVisibility(View.VISIBLE);
}
shopping_tv_totalprice.setText(String.valueOf(totalPrice1));
}
});
obj = JSON.parseObject(list.get(position).getPricePattern(), new TypeReference<PricePatternDto>() {
});
count = new ArrayList();
countPrice = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
count.add(list.get(i).getQuantity());
PricePatternDto obj = JSON.parseObject(list.get(i).getPricePattern(), new TypeReference<PricePatternDto>() {
});
int price = Integer.valueOf(obj.getPrice().toString()) * count.get(i);
countPrice.add(price);
}
viewHolder.time.setText(obj.getPriceName());
viewHolder.name.setText(list.get(position).getProductName());
viewHolder.count.setText(String.valueOf(count.get(position)));
viewHolder.price.setText(String.valueOf(countPrice.get(position)));
viewHolder.reduce.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List<Integer> plusCount = new ArrayList();
for (int i = 0; i < list.size(); i++) {
if (i == position) {
if (count.get(position) == 1) {
plusCount.add(count.get(position));
} else {
plusCount.add(count.get(position) - 1);
}
}
plusCount.add(list.get(i).getQuantity());
}
updateQuantity(list.get(position).getId(), plusCount.get(position), position);
}
});
viewHolder.plus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
List<Integer> plusCount = new ArrayList();
for (int i = 0; i < list.size(); i++) {
if (i == position) {
plusCount.add(count.get(position) + 1);
}
plusCount.add(list.get(i).getQuantity());
}
updateQuantity(list.get(position).getId(), plusCount.get(position), position);
}
});
// 取出bean对象
return convertView;
}
public void updateQuantity(int productId, int newCount, int position) {
RequestCallback.requestOkhttpPost(IN.updateQuantity(TOKEN, productId, newCount), new ResponseCallback<ReturnInfo<String>>() {
@Override
public void onResponse(String response, int id) {
ReturnInfo<PageInfo<ShoppingCartDto>> data = JSON.parseObject(response, new TypeReference<ReturnInfo<PageInfo<ShoppingCartDto>>>() {
});
if (ErrorInfoEnums.success.equals(data.getErrorInfo())) {
getUpdateData();
// int price = Integer.valueOf(obj.getPrice().toString()) * count.get(position);
// viewHolder.price.setText(String.valueOf(price));
// viewHolder.count.setText(String.valueOf(newCount));
}
}
});
}
public void getUpdateData() {
RequestCallback.requestOkhttpGet(IN.pageShoppingCart(TOKEN), new ResponseCallback<ReturnInfo<String>>() {
@Override
public void onResponse(String response, int id) {
ReturnInfo<PageInfo<ShoppingCartDto>> obj = JSON.parseObject(response, new TypeReference<ReturnInfo<PageInfo<ShoppingCartDto>>>() {
});
if (judgementErrorInfo(context, obj.getErrorInfo(), obj.getOtherData()) && obj.getData().getList().size() > 0) {
list = obj.getData().getList();
notifyDataSetChanged();
}
}
});
}
class ViewHolder {
public TextView name;
public ImageView check;
public ImageView check2;
public ImageView photo;
public TextView time;
public TextView price;
public TextView reduce;
public TextView count;
public TextView plus;
}
}