grivdview列表选择混乱

功能购物车:在这里没有使用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;

        }

    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值