京东二级购物车

package test.bawie.fangjd.model.adapter;

import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.support.v7.app.AlertDialog;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.squareup.picasso.Picasso;

import org.greenrobot.eventbus.EventBus;

import java.util.List;

import test.bawie.fangjd.AddDelView;
import test.bawie.fangjd.R;
import test.bawie.fangjd.model.bean.DeleteGoods;
import test.bawie.fangjd.model.bean.GoodsCarBean;
import test.bawie.fangjd.model.bean.ShanchuBean;
import test.bawie.fangjd.model.eventbus.MessageCounEvent;
import test.bawie.fangjd.model.eventbus.MessageEvent;
import test.bawie.fangjd.presenter.DeletePresenter;
import test.bawie.fangjd.presenter.ShanchuPresenter;
import test.bawie.fangjd.view.IDeleteListener;
import test.bawie.fangjd.view.IShanchuView;


public class MyExAdapter extends BaseExpandableListAdapter implements IShanchuView{
    private Context context;
    private List<GoodsCarBean.DataBean> groupList;
    private List<List<GoodsCarBean.DataBean.ListBean>> childList;
    private int count;
    private double price;
    private int numm;
    private int pid;
    private ShanchuPresenter shanchuPresenter;

    public MyExAdapter(Context context, List<GoodsCarBean.DataBean> grouplist, List<List<GoodsCarBean.DataBean.ListBean>> childlist) {
        this.context = context;
        this.groupList = grouplist;
        this.childList = childlist;
    }

    @Override
    public int getGroupCount() {
        return groupList.size();
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return childList.get(groupPosition).size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return groupList.get(groupPosition);
    }

    @Override
    public Object getChild(int groupPosition, int childPosition) {
        return childList.get(groupPosition).get(childPosition);
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
        View view;
        GroupViewHolder holder;
        if (convertView == null) {
            holder = new GroupViewHolder();
            view = View.inflate(context, R.layout.adapter_addcar_group, null);
            holder.cb_group = view.findViewById(R.id.cb_group);
            holder.tv_shangjia = view.findViewById(R.id.tv_shangjia);
            view.setTag(holder);
        } else {
            view = convertView;
            holder = (GroupViewHolder) view.getTag();
        }
        //赋值
        GoodsCarBean.DataBean dataBean = groupList.get(groupPosition);
        holder.cb_group.setChecked(dataBean.isChecked());
        holder.tv_shangjia.setText(dataBean.getSellerName());
        //给group的checkbox设置点击事件
        holder.cb_group.setOnClickListener(new GroupCbOnClickListener(groupPosition));
        return view;
    }

    @Override
    public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
        View view;
        final ChildViewHolder holder;
        if (convertView == null) {
            holder = new ChildViewHolder();
            view = View.inflate(context, R.layout.adapter_addcar_child, null);
            holder.cb_child = view.findViewById(R.id.cb_child);
            holder.iv_child = view.findViewById(R.id.iv_child);
            holder.shan=view.findViewById(R.id.shanshan);
            holder.tv_child_name = view.findViewById(R.id.tv_child_name);
            holder.tv_child_price = view.findViewById(R.id.tv_child_price);
            holder.myadd = view.findViewById(R.id.myadd);
            holder.add = view.findViewById(R.id.add);
            holder.del = view.findViewById(R.id.del);
            holder.num = view.findViewById(R.id.num);
            holder.lldel = view.findViewById(R.id.lldel);
            view.setTag(holder);
        } else {
            view = convertView;
            holder = (ChildViewHolder) view.getTag();
        }
        shanchuPresenter = new ShanchuPresenter(context, this);

        //赋值
        final GoodsCarBean.DataBean.ListBean listBean = childList.get(groupPosition).get(childPosition);
        holder.cb_child.setChecked(listBean.isChecked());
        holder.tv_child_name.setText(listBean.getTitle());
        pid = listBean.getPid();
        holder.tv_child_price.setText("¥"+listBean.getPrice());
        String images = listBean.getImages();
        String[] imgArr = images.split("\\|");
        Picasso.with(context).load(imgArr[0]).into(holder.iv_child);
        holder.cb_child.setOnClickListener(new ChildCbOnClickListener(groupPosition, childPosition));
        numm = Integer.parseInt(holder.num.getText().toString().trim());
        holder.shan.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                shanchuPresenter.getWuxiian();
            }
        });
        holder.lldel.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                AlertDialog alertDialog = new AlertDialog.Builder(context)
                        .setTitle(listBean.getTitle())
                        .setMessage("确定删除吗?")
                        .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialogInterface, int i) {
//                                Toast.makeText(context, "点了", Toast.LENGTH_SHORT).show();
                                SharedPreferences sharedPreferences = context.getSharedPreferences("User", Context.MODE_PRIVATE);
                                final int uid = sharedPreferences.getInt("uid", 0);
                                final String token = sharedPreferences.getString("token", "");
                                DeletePresenter deletePresenter = new DeletePresenter(new IDeleteListener() {
                                    @Override
                                    public int getUid() {
                                        return uid;
                                    }

                                    @Override
                                    public int getPid() {
                                        return listBean.getPid();
                                    }

                                    @Override
                                    public String getToken() {
                                        return token;
                                    }

                                    @Override
                                    public void getData(DeleteGoods bean) {
                                        Toast.makeText(context, bean.getMsg(), Toast.LENGTH_SHORT).show();

                                        notifyDataSetChanged();
                                    }
                                });
                                deletePresenter.lianjie();

                            }
                        })
                        .setNegativeButton("取消", null)
                        .show();

                return true;
            }
        });
        holder.myadd.setOnItemClick(new AddDelView.OnItemClick() {
            @Override
            public void onItemAddClick(int count) {
                if (listBean.isChecked()) {
                    MessageCounEvent messageCounEvent = new MessageCounEvent();
                    messageCounEvent.setPrice(listBean.getPrice());
                    messageCounEvent.setCount(1);
                    EventBus.getDefault().post(messageCounEvent);
                } else {
                    Toast.makeText(context, "请勾选", Toast.LENGTH_SHORT).show();
                    holder.myadd.setCount(1);
                }
                notifyDataSetChanged();
            }

            @Override
            public void onItemDelClick(int count) {
                if (listBean.isChecked()) {
                    MessageCounEvent messageCounEvent = new MessageCounEvent();
                    double price = listBean.getPrice();
                    messageCounEvent.setPrice(-price);
                    messageCounEvent.setCount(-1);
                    EventBus.getDefault().post(messageCounEvent);
                } else{
                    Toast.makeText(context, "请勾选", Toast.LENGTH_SHORT).show();
                    holder.myadd.setCount(1);
                }
                notifyDataSetChanged();
            }
        });
        return view;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }

    @Override
    public int uid() {
        return 509;
    }

    @Override
    public int pscid() {
        return pid;
    }

    @Override
    public void getBean(ShanchuBean shanchuBean) {
        String msg = shanchuBean.getMsg();
        Toast.makeText(context,msg,Toast.LENGTH_SHORT).show();
    }

    class GroupViewHolder {
        CheckBox cb_group;
        TextView tv_shangjia;
    }

    class ChildViewHolder {
        Button shan;
        CheckBox cb_child;
        ImageView iv_child;
        TextView tv_child_name;
        TextView tv_child_price;
        AddDelView myadd;
        TextView add;
        TextView del;
        TextView num;
        LinearLayout lldel;
    }

    class ChildCbOnClickListener implements View.OnClickListener {
        private int groupPosition;
        private int childPosition;

        public ChildCbOnClickListener(int groupPosition, int childPosition) {
            this.groupPosition = groupPosition;
            this.childPosition = childPosition;
        }

        @Override
        public void onClick(View v) {
            List<GoodsCarBean.DataBean.ListBean> listBeen = childList.get(groupPosition);
            GoodsCarBean.DataBean.ListBean childBean = listBeen.get(childPosition);
            if (v instanceof CheckBox) {
                CheckBox cb = (CheckBox) v;
                childBean.setChecked(cb.isChecked());
                //计算选中的商品数,并发送到主界面进行显示

                //判断该商家的所有商品的checkbox是否都选中
                if (isChildChecked(listBeen)) {
                    groupList.get(groupPosition).setChecked(true);
                    MessageCounEvent msgCount = new MessageCounEvent();
                    msgCount.setCount(1*numm);
                    msgCount.setPrice(childBean.getPrice()*numm);
                    EventBus.getDefault().post(msgCount);
                    MessageEvent msg = new MessageEvent();
                    msg.setFlag(isGroupChecked());
                    EventBus.getDefault().post(msg);
                    notifyDataSetChanged();
                } else {
                    groupList.get(groupPosition).setChecked(false);
                    MessageCounEvent messageCounEvent = new MessageCounEvent();
                    double price = childBean.getPrice();
                    messageCounEvent.setPrice(-childBean.getPrice()*numm);
                    messageCounEvent.setCount(-1*numm);
                    EventBus.getDefault().post(messageCounEvent);
                    MessageEvent msg = new MessageEvent();
                    msg.setFlag(false);
                    EventBus.getDefault().post(msg);
                    notifyDataSetChanged();
                    notifyDataSetChanged();
                }
            }

        }
    }

    /**
     * 判断该商家的所有商品的checkbox是否都选中
     *
     * @return
     */
    private boolean isChildChecked(List<GoodsCarBean.DataBean.ListBean> childBeen) {
        for (int i = 0; i < childBeen.size(); i++) {
            GoodsCarBean.DataBean.ListBean listBean = childBeen.get(i);
            if (!listBean.isChecked()) {
                return false;
            }
        }
        return true;
    }

    class GroupCbOnClickListener implements View.OnClickListener {
        private int groupPostion;

        public GroupCbOnClickListener(int groupPostion) {
            this.groupPostion = groupPostion;
        }

        @Override
        public void onClick(View v) {
            if (v instanceof CheckBox) {

                //多态,因为我是给checkbox设置的点击事件,所以可以强转成checkbox
                CheckBox cb = (CheckBox) v;
                //根据cb.isChecked()是否选中,给一级列的checkbox改变状态
                groupList.get(groupPostion).setChecked(cb.isChecked());
                List<GoodsCarBean.DataBean.ListBean> listBeen = childList.get(groupPostion);
                for (GoodsCarBean.DataBean.ListBean childBean : listBeen) {
                    childBean.setChecked(cb.isChecked());
                }
                //计算选中的商品数,并发送到主界面进行显示
                if(cb.isChecked()){
                    MessageCounEvent msgCount = new MessageCounEvent();

                    msgCount.setCount(listBeen.size());
                    for (int i = 0; i <listBeen.size() ; i++) {
                        msgCount.setPrice(listBeen.get(i).getPrice());
                    }



                    EventBus.getDefault().post(msgCount);
                }else {
                    MessageCounEvent msgCount = new MessageCounEvent();
                    msgCount.setCount(-listBeen.size());
                    for (int i = 0; i <listBeen.size() ; i++) {
                        msgCount.setPrice(-listBeen.get(i).getPrice());
                    }
                    EventBus.getDefault().post(msgCount);
                }
                MessageEvent msg = new MessageEvent();
                msg.setFlag(isGroupChecked());
                EventBus.getDefault().post(msg);
                notifyDataSetChanged();
            }
        }
    }

    /**
     * 判断其它的商家是否选中
     *
     * @return
     */
    private boolean isGroupChecked() {
        for (GoodsCarBean.DataBean groupBean : groupList) {
            if (!groupBean.isChecked()) {
                return false;
            }
        }
        return true;
    }

    /**
     * 主界面全选按钮的操作
     *
     * @param bool
     */
    public void allChecked(boolean bool) {
        for (int i = 0; i < groupList.size(); i++) {
            groupList.get(i).setChecked(bool);
            for (int j = 0; j < childList.get(i).size(); j++) {
                childList.get(i).get(j).setChecked(bool);
                childList.get(i).get(j).getPrice();
            }
        }
        if(bool){
            //计算选中的商品数,并发送到主界面进行显示
            MessageCounEvent msgCount = new MessageCounEvent();
            int totalCount = totalCount();
            msgCount.setCount(totalCount);
            msgCount.setPrice(totalprice());
            EventBus.getDefault().post(msgCount);
            notifyDataSetChanged();
        }else {
            MessageCounEvent msgCount = new MessageCounEvent();
            int i = totalCount();
            msgCount.setCount(0);
            double totalprice = totalprice();
            msgCount.setPrice(0);
            EventBus.getDefault().post(msgCount);
            notifyDataSetChanged();
        }


    }

    private int totalCount() {
        count = 0;
        for (int i = 0; i < groupList.size(); i++) {
            for (int j = 0; j < childList.get(i).size(); j++) {
                if (childList.get(i).get(j).isChecked()) {
                    //遍历所有的商品,只要是选中状态的,就加1
                    count++;
                }else {
                    count--;
                }
            }
        }
        return count;
    }


    private double totalprice() {
        price = 0.0;
        for (int i = 0; i < groupList.size(); i++) {
            for (int j = 0; j < childList.get(i).size(); j++) {
                if (childList.get(i).get(j).isChecked()) {
                    price+=childList.get(i).get(j).getPrice();
                }else {
                    price-=childList.get(i).get(j).getPrice();
                }
            }
        }
        return price;
    }

}
dnSpy是目前业界广泛使用的一款.NET程序的反编译工具,支持32位和64位系统环境。它允许用户查看和编辑.NET汇编和反编译代码,以及调试.NET程序。该工具通常用于程序开发者在维护和调试过程中分析程序代码,尤其在源代码丢失或者无法获取的情况下,dnSpy能提供很大的帮助。 V6.1.8版本的dnSpy是在此系列软件更新迭代中的一个具体版本号,代表着该软件所具备的功能与性能已经达到了一个相对稳定的水平,对于处理.NET程序具有较高的可用性和稳定性。两个版本,即32位的dnSpy-net-win32和64位的dnSpy-net-win64,确保了不同操作系统架构的用户都能使用dnSpy进行软件分析。 32位的系统架构相较于64位,由于其地址空间的限制,只能支持最多4GB的内存空间使用,这在处理大型项目时可能会出现不足。而64位的系统能够支持更大的内存空间,使得在处理大型项目时更为方便。随着计算机硬件的发展,64位系统已经成为了主流,因此64位的dnSpy也更加受开发者欢迎。 压缩包文件名“dnSpy-net-win64.7z”和“dnSpy-net-win32.7z”中的“.7z”表示该压缩包采用了7-Zip压缩格式,它是一种开源的文件压缩软件,以其高压缩比著称。在实际使用dnSpy时,用户需要下载对应架构的压缩包进行解压安装,以确保软件能够正确运行在用户的操作系统上。 dnSpy工具V6.1.8版本的发布,对于.NET程序员而言,无论是32位系统还是64位系统用户,都是一个提升工作效率的好工具。用户可以根据自己计算机的操作系统架构,选择合适的版本进行下载使用。而对于希望进行深度分析.NET程序的开发者来说,这个工具更是不可或缺的利器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值