android 購物車 listview嵌套問題

該購物車使用3個listview嵌套完成,具有3級分類:倉庫、商鋪、商家,效果圖如下:

掃描關注我的微信公衆號:




代碼直接貼出來:

package com.globex.o2o.controllers.shoppingCart;


import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.globex.core.android.utils.ViewUtils;
import com.globex.core.common.utils.JsonUtils;
import com.globex.o2o.R;
import com.globex.o2o.Utils.CommonUtils;
import com.globex.o2o.Utils.ResponseUtils;
import com.globex.o2o.constants.Api;
import com.globex.o2o.controllers.BaseFragment;
import com.globex.o2o.controllers.order.VerifyOrder;
import com.globex.o2o.http.DefaultStringCallBack;
import com.google.gson.Gson;
import com.zhy.http.okhttp.OkHttpUtils;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.xutils.x;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import de.greenrobot.event.EventBus;
import okhttp3.Call;

public class ShoppingCartFragment extends BaseFragment {
    private ListView mListView;// 列表
    private View rootView;
    private ProgressBar pb;
    private boolean isEdit = false;
    Gson gson = new Gson();
    /**
     * 解析數據
     */
    private List<String> wareHouseList = new ArrayList<>();
    private List<Goods> selectGoods = new ArrayList<>();

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        if (rootView == null) {
            rootView = inflater.inflate(R.layout.fragment_shoppingcar_layout, null);
        }
        initView();
        initListener();
        return rootView;
    }

    private float selectTotalPrice, selectTotalTax;

    //EventBus處理函數
    public void onEvent(EBMassage msg) {
        ArrayList<Goods> goodList = msg.getGoodList();
        int what = msg.getWhat();
        //商品添加
        for (int i = 0; i < goodList.size(); i++) {
            Goods goods = goodList.get(i);
            if (what == 1) {
                if (selectGoods.contains(goods)) {
                    selectGoods.remove(goods);
                }
                selectGoods.add(goods);
            }
            if (what == 2) {
                selectGoods.remove(goods);
            }
        }
        reflashBalance();
        reflash();
    }

    private SwipeRefreshLayout swipeRefreshLayout;
    private TextView shoppingcar_subtitle, shoppingcar_txtv_submit, shoppingcar_txtv_tollPrice, shoppingcar_txtv_tax;
    private CheckBox shoppingcar_check_box_all;
    private RelativeLayout empty_view;

    //初始化視圖
    public void initView() {
        pb = (ProgressBar) rootView.findViewById(R.id.shoppingcar_pb);
        empty_view = (RelativeLayout) rootView.findViewById(R.id.shoppingcar_rl_empty);
        //下拉刷新
        swipeRefreshLayout = (SwipeRefreshLayout) rootView.findViewById(R.id.shoppingCar_swipeRefreshLayout);
        swipeRefreshLayout.setColorSchemeColors(Color.RED, Color.GREEN, Color.BLUE, Color.CYAN);
        mListView = (ListView) rootView.findViewById(R.id.listview);
        firstAdapter = new FirstListViewAdapter();
        mListView.setAdapter(firstAdapter);
        adapterList.add(firstAdapter);
        shoppingcar_subtitle = (TextView) rootView.findViewById(R.id.shoppingcar_subtitle);
        shoppingcar_check_box_all = (CheckBox) rootView.findViewById(R.id.shoppingcar_check_box_all);
        shoppingcar_txtv_submit = (TextView) rootView.findViewById(R.id.shoppingcar_txtv_submit);
        shoppingcar_txtv_tollPrice = (TextView) rootView.findViewById(R.id.shoppingcar_txtv_tollPrice);
        shoppingcar_txtv_tax = (TextView) rootView.findViewById(R.id.shoppingcar_txtv_tax);
    }

    //初始化監聽器
    public void initListener() {
        swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
            @Override
            public void onRefresh() {
                loadData();
            }
        });
        //全選Checkbox
        shoppingcar_check_box_all.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //全選
                selectAllB();
            }
        });
        //右上角的文字
        shoppingcar_subtitle.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!empty_view.isShown()) {
                    shoppingcar_subtitle.setTextColor(Color.WHITE);
                } else {
                    shoppingcar_subtitle.setText("編輯");
                    shoppingcar_subtitle.setTextColor(Color.GRAY);
                    return;
                }
                if (shoppingcar_subtitle.getText().equals("編輯")) {
                    shoppingcar_subtitle.setText("完成");
                    isEdit = true;
                } else {
                    shoppingcar_subtitle.setText("編輯");
                    isEdit = false;
                    loadData();
                }
                reflash();
            }
        });
        //提交
        shoppingcar_txtv_submit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                submit();
            }
        });
    }

    //加載數
    private void loadData() {
        if (!CommonUtils.getHttpHeadParams(getActivity()).containsKey("tk")) {
            return;
        }
        pb.setVisibility(View.VISIBLE);
        wareHouseList.clear();
        cSellerList.clear();
        cGoodsList.clear();
        OkHttpUtils
                .get()
                .headers(CommonUtils.getHttpHeadParams(getApplication()))
                .url(getUrl(Api.getShoppingCar))
                .build()
                .execute(new DefaultStringCallBack() {
                    @Override
                    public void onResponse(String response) {
                        pb.setVisibility(View.GONE);
                        swipeRefreshLayout.setRefreshing(false);
                        try {
                            JSONObject object = new JSONObject(response);
                            if (object.getInt("code") == 200) {
                                parseJson(object);
                                reflash();
                            } else {
                                ResponseUtils.checkTokenOfShoppingCar(getActivity(), object.getInt("code"));
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }

                    @Override
                    public void onError(Call call, Exception e) {
                        pb.setVisibility(View.GONE);
                        swipeRefreshLayout.setRefreshing(false);
                        Toast.makeText(getApplication(), "獲取購物車失敗,錯誤信息:" + e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                });
    }

    //刷新結算信息
    private void reflashBalance() {
        selectTotalPrice = 0;
        selectTotalTax = 0;
        for (int i = 0; i < selectGoods.size(); i++) {
            selectTotalPrice += selectGoods.get(i).getTotal_price();
            selectTotalTax += selectGoods.get(i).getTotal_tax();
        }
        shoppingcar_txtv_submit.setText("結算(" + selectGoods.size() + ")");
        shoppingcar_txtv_tollPrice.setText("¥" + selectTotalPrice);
        shoppingcar_txtv_tax.setText("(含關稅:¥" + selectTotalTax + ",不含運費)");
    }

    private FirstListViewAdapter firstAdapter;
    private List<List<Seller>> cSellerList = new ArrayList<>();
    private List<List<ArrayList<Goods>>> cGoodsList = new ArrayList<>();
    //保存選中的狀態
    private List<HashMap<String, HashMap<Integer, Boolean>>> itemIsChecked = new ArrayList<>();
    private List<ArrayList<Boolean>> subIsChecked = new ArrayList<>();
    private HashMap<String, Boolean> listState = new HashMap<>();
    private String info;
    private boolean isEdited = false;

    /**
     * 解析數據
     *
     * @throws JSONException
     */
    private void parseJson(JSONObject obj) throws JSONException {
        isEdit = false;
        isEdited = false;
        shoppingcar_subtitle.setText("編輯");
        cGoodsList.clear();
        cSellerList.clear();
        wareHouseList.clear();
        JSONObject data = obj.getJSONObject("data");
        info = obj.getString("info");
        if (data.length() == 0) {
            shoppingcar_subtitle.setTextColor(Color.GRAY);
            shoppingcar_subtitle.setText("編輯");
            empty_view.setVisibility(View.VISIBLE);
            ((TextView) rootView.findViewById(R.id.shoppingcar_txtv_noids)).setText(obj.getString("info"));
            ((RelativeLayout) rootView.findViewById(R.id.bottom_bar)).setVisibility(View.GONE);
            return;
        } else {
            shoppingcar_subtitle.setTextColor(Color.WHITE);
            empty_view.setVisibility(View.GONE);
            ((RelativeLayout) rootView.findViewById(R.id.bottom_bar)).setVisibility(View.VISIBLE);
        }
        JSONArray arr = data.getJSONArray("cart_list");
        for (int i = 0; i < arr.length(); i++) {
            JSONObject obj1 = arr.getJSONObject(i);
            wareHouseList.add(obj1.getString("warehouse"));
            JSONArray content = obj1.getJSONArray("content");
            List<Seller> sellerList = new ArrayList<>();
            List<ArrayList<Goods>> goodsList = new ArrayList<>();
            HashMap<String, HashMap<Integer, Boolean>> isCd = new HashMap<>();
            ArrayList<Boolean> checkBoxes = new ArrayList<>();
            for (int j = 0; j < content.length(); j++) {
                JSONObject obj2 = content.getJSONObject(j);
                JSONObject seller = obj2.getJSONObject("seller");
                Seller seller1 = gson.fromJson(seller.toString(), Seller.class);
                sellerList.add(seller1);
                JSONArray goodsarr = obj2.getJSONArray("goods");
                ArrayList<Goods> goodses = new ArrayList<>();
                HashMap<Integer, Boolean> isC = new HashMap<>();
                for (int k = 0; k < goodsarr.length(); k++) {
                    JSONObject goods = goodsarr.getJSONObject(k);
                    Goods goods1 = gson.fromJson(goods.toString(), Goods.class);
                    goodses.add(goods1);
                    isC.put(goods1.getCart_id(), false);

                }
                checkBoxes.add(false);
                isCd.put(seller1.getName(), isC);
                goodsList.add(goodses);
            }
            if (!listState.containsKey(obj1.getString("warehouse"))) {
                listState.put(obj1.getString("warehouse"), false);
            }
            subIsChecked.add(checkBoxes);
            itemIsChecked.add(isCd);
            cGoodsList.add(goodsList);
            cSellerList.add(sellerList);
        }
    }


    //第一個Adapter
    class FirstListViewAdapter extends BaseAdapter {
        @Override
        public int getCount() {
            return wareHouseList.size();
        }

        @Override
        public Object getItem(int position) {
            return position;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            final List<ArrayList<Goods>> cl = cGoodsList.get(position);
            final FirstListViewHolder holder;
            final HashMap<String, HashMap<Integer, Boolean>> arrayLists = itemIsChecked.get(position);
            final ArrayList<Boolean> state = subIsChecked.get(position);
            if (convertView == null) {
                holder = new FirstListViewHolder();
                convertView = LayoutInflater.from(getActivity()).inflate(R.layout.shoppingcarfragment_listviewitem1, null);
                holder.lv = (ListView) convertView.findViewById(R.id.shopping_subListView);
                holder.ck = (CheckBox) convertView.findViewById(R.id.shoppingcar_sub_checbox);
                holder.warehouse = (TextView) convertView.findViewById(R.id.listViewItem1_warehouse);
                SubAdapter subAdapter = new SubAdapter(cSellerList.get(position), cl, arrayLists, state, position);
                adapterList.add(subAdapter);
                holder.lv.setAdapter(subAdapter);
                ViewUtils.setListViewHeightBasedOnChildren(holder.lv);
                convertView.setTag(holder);
            } else {
                holder = (FirstListViewHolder) convertView.getTag();
            }
            holder.ck.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    boolean checked = holder.ck.isChecked();
                    listState.put(wareHouseList.get(position), checked);
                    //通知子改變狀態
                    for (int i = 0; i < state.size(); i++) {
                        state.set(i, checked);
                    }
                    //通知孫改變狀態
                    Iterator<Map.Entry<String, HashMap<Integer, Boolean>>> iterator1 = arrayLists.entrySet().iterator();
                    while (iterator1.hasNext()) {
//                    for (int i = 0; i < arrayLists.size(); i++) {
                        HashMap<Integer, Boolean> list = iterator1.next().getValue();
//                        for (int j = 0; j < list.size(); j++) {
//                            list.set(j, checked);
//                        }
                        Iterator<Map.Entry<Integer, Boolean>> iterator = list.entrySet().iterator();
                        while (iterator.hasNext()) {
                            Map.Entry<Integer, Boolean> next = iterator.next();
                            next.setValue(checked);
                        }
                    }
                    //改變全選的狀態
                    if (listState.containsValue(false)) {
                        shoppingcar_check_box_all.setChecked(false);
                    } else {
                        shoppingcar_check_box_all.setChecked(true);
                    }
                    //刷新數據
                    reflash();
                    //勾選商品變化
                    for (int i = 0; i < cl.size(); i++) {
                        ArrayList<Goods> goodses = cl.get(i);
                        for (int j = 0; j < goodses.size(); j++) {
                            if (checked) {
                                EventBus.getDefault().post(new EBMassage(goodses, 1));
                            } else {
                                EventBus.getDefault().post(new EBMassage(goodses, 2));
                            }
                        }
                    }
                }
            });
            holder.warehouse.setText(wareHouseList.get(position));
            holder.ck.setChecked(listState.get(wareHouseList.get(position)));
            return convertView;
        }
    }

    private List<Boolean> subStatus;

    //第二個Adapter
    class SubAdapter extends BaseAdapter {
        private List<Seller> datas;
        private List<ArrayList<Goods>> clist;
        private HashMap<String, HashMap<Integer, Boolean>> misC;
        int p;

        @Override
        public int getCount() {
            return datas.size();
        }

        public SubAdapter(List data, List<ArrayList<Goods>> cl, HashMap<String, HashMap<Integer, Boolean>> isC, ArrayList<Boolean> state, int p0) {
            datas = data;
            p = p0;
            clist = cl;
            misC = isC;
            subStatus = state;
        }

        @Override
        public Object getItem(int position) {
            return position;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            if (clist.get(position).size() == 0) {
                View inflate = LayoutInflater.from(getActivity()).inflate(R.layout.sublistview, null);
                inflate.findViewById(R.id.sub_root_view).setVisibility(View.GONE);
                return inflate;
            }
            final SubListViewHolder holder;
            SubListView_ListViewAdapter subSubAdapter = null;
            if (convertView == null) {
                holder = new SubListViewHolder();
                convertView = LayoutInflater.from(getActivity()).inflate(R.layout.sublistview, null);
                holder.ck = (CheckBox) convertView.findViewById(R.id.sublistView_checbox);
                holder.lv = (ListView) convertView.findViewById(R.id.sublistView_ListView);
                holder.tvtv = (TextView) convertView.findViewById(R.id.subListview_sellerName);
                convertView.setTag(holder);
                if (misC.get(datas.get(position).getName()) == null) {
                    misC.put(datas.get(position).getName(), new HashMap<Integer, Boolean>(100));
                    subStatus.add(false);
                }
                subSubAdapter = new SubListView_ListViewAdapter(clist.get(position), misC.get(datas.get(position).getName()), position, p);
                adapterList.add(subSubAdapter);
                holder.lv.setAdapter(subSubAdapter);
                ViewUtils.setListViewHeightBasedOnChildren(holder.lv);
            } else {
                holder = (SubListViewHolder) convertView.getTag();
            }
            holder.tvtv.setText(datas.get(position).getName());
            holder.ck.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    boolean checked = holder.ck.isChecked();
                    subStatus.set(position, checked);
                    //使子checkbox也變狀態
//                    for (int j = 0; j < isC.size(); j++) {
//                        isC.set(j, checked);
//                    }
                    Iterator<Map.Entry<Integer, Boolean>> iterator = misC.get(datas.get(position).getName()).entrySet().iterator();
                    while (iterator.hasNext()) {
                        Map.Entry<Integer, Boolean> next = iterator.next();
                        next.setValue(checked);
                    }

                    //勾選商品變化
                    if (checked) {
                        EventBus.getDefault().post(new EBMassage(clist.get(position), 1));
                    } else {
                        EventBus.getDefault().post(new EBMassage(clist.get(position), 2));
                    }
                    //設置父類的狀態
                    if (subStatus.contains(false)) {
                        listState.put(wareHouseList.get(p), false);
                    } else {
                        listState.put(wareHouseList.get(p), true);
                    }
                    //設置全選按鈕的狀態
                    if (listState.containsValue(false)) {
                        shoppingcar_check_box_all.setChecked(false);
                    } else {
                        shoppingcar_check_box_all.setChecked(true);
                    }
                    //刷新數據
                    reflash();
                }
            });
            holder.ck.setChecked(subStatus.get(position));
            return convertView;
        }
    }


    //第三個Adapter
    class SubListView_ListViewAdapter extends BaseAdapter {
        ArrayList<Goods> datas;
        HashMap<Integer, Boolean> mIsChecked;
        int p;
        int ye;

        @Override
        public int getCount() {
            return datas.size();
        }

        public SubListView_ListViewAdapter(ArrayList<Goods> data, HashMap<Integer, Boolean> isC, int po, int y) {
            datas = data;
            mIsChecked = isC;
            p = po;
            ye = y;
        }

        @Override
        public Object getItem(int position) {
            return position;
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(final int position, View convertView, ViewGroup parent) {
            final Goods goods = datas.get(position);
            final ThreeListViewHolder holder;
            if (null == convertView) {
                holder = new ThreeListViewHolder();
                convertView = LayoutInflater.from(getActivity()).inflate(R.layout.cart_list_item, null);
                holder.ck = (CheckBox) convertView.findViewById(R.id.car_item_check_box);
                holder.count = (TextView) convertView.findViewById(R.id.car_item_numbTxtv);
                holder.imgv = (ImageView) convertView.findViewById(R.id.car_item_imgv);
                holder.intro = (TextView) convertView.findViewById(R.id.car_item_intro);
                holder.price = (TextView) convertView.findViewById(R.id.car_item_priceTxtv);
                holder.tax = (TextView) convertView.findViewById(R.id.car_item_taxTxtv);
                holder.shoppingcar_ll_tianshan = (LinearLayout) convertView.findViewById(R.id.shoppingcar_ll_tianshan);
                holder.shoppingcar_txtv_jian = (TextView) convertView.findViewById(R.id.shoppingcar_txtv_jian);
                holder.shoppingcar_txtv_add = (TextView) convertView.findViewById(R.id.shoppingcar_txtv_add);
                holder.shoppingcar_edit = (TextView) convertView.findViewById(R.id.shoppingcar_edit);
                convertView.setTag(holder);
            } else {
                holder = (ThreeListViewHolder) convertView.getTag();
            }
            if (isEdit) {
                holder.ck.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        //刪除商品
                        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                        builder.setTitle("確認刪除?").setNegativeButton("刪除", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                delete(goods, datas, position);
                            }
                        }).setPositiveButton("否", null).show();
                    }
                });
                holder.intro.setVisibility(View.GONE);
                holder.tax.setVisibility(View.GONE);
                holder.ck.setButtonDrawable(getResources().getDrawable(R.drawable.checkbox_delete));
                holder.shoppingcar_ll_tianshan.setVisibility(View.VISIBLE);
                //添加數量
                holder.shoppingcar_txtv_add.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        holder.shoppingcar_edit.setText((Integer.parseInt(holder.shoppingcar_edit.getText().toString()) + 1) + "");
                        editNumb(goods, Integer.parseInt(holder.shoppingcar_edit.getText().toString()));
                    }
                });
                //減少數量
                holder.shoppingcar_txtv_jian.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        int numb = Integer.parseInt(holder.shoppingcar_edit.getText().toString());
                        if (numb == 1) {
                            return;
                        } else {
                            holder.shoppingcar_edit.setText((numb - 1) + "");
                        }
                        editNumb(goods, Integer.parseInt(holder.shoppingcar_edit.getText().toString()));
                    }
                });
            } else {
                holder.ck.setButtonDrawable(getResources().getDrawable(R.drawable.check_box_bg));
                holder.shoppingcar_ll_tianshan.setVisibility(View.GONE);
                holder.intro.setVisibility(View.VISIBLE);
                holder.tax.setVisibility(View.VISIBLE);
                holder.intro.setText(goods.getName());
                holder.tax.setText("適用稅率:" + goods.getTotal_tax());
                if (mIsChecked.get(goods.getCart_id()) != null) {
                    holder.ck.setChecked((mIsChecked.get(goods.getCart_id())));
                } else {
                    mIsChecked.put(goods.getCart_id(), false);
                }
                holder.ck.setOnClickListener(new View.OnClickListener() {
                                                 @Override
                                                 public void onClick(View v) {
                                                     ArrayList<Goods> arrayList = new ArrayList<>();
                                                     arrayList.add(datas.get(position));
                                                     if (holder.ck.isChecked()) {
                                                         EventBus.getDefault().post(new EBMassage(arrayList, 1));
                                                     } else {
                                                         EventBus.getDefault().post(new EBMassage(arrayList, 2));
                                                     }
                                                     mIsChecked.put(goods.getCart_id(), holder.ck.isChecked());
                                                     //設置父類的狀態
                                                     if (mIsChecked.containsValue(false)) {
                                                         subStatus.set(p, false);
                                                     } else {
                                                         subStatus.set(p, true);
                                                     }
                                                     //設置爺類改變
                                                     if (subStatus.contains(false)) {
                                                         listState.put(wareHouseList.get(ye), false);
                                                     } else {
                                                         listState.put(wareHouseList.get(ye), true);
                                                     }
                                                     //設置全選狀態
                                                     if (listState.containsValue(false)) {
                                                         shoppingcar_check_box_all.setChecked(false);
                                                     } else {
                                                         shoppingcar_check_box_all.setChecked(true);
                                                     }
                                                     reflash();
                                                 }
                                             }
                );
            }
            holder.count.setText("X" + goods.getBuy_num());
            holder.price.setText("¥" + goods.getCprice());
            x.image().bind(holder.imgv, goods.getImage());
            //設置父類的狀態
            if (mIsChecked.containsValue(false)) {
                subStatus.set(p, false);
            } else {
                subStatus.set(p, true);
            }
            //設置爺類改變
            if (subStatus.contains(false)) {
                listState.put(wareHouseList.get(ye), false);
            } else {
                listState.put(wareHouseList.get(ye), true);
            }
            //設置全選狀態
            if (listState.containsValue(false)) {
                shoppingcar_check_box_all.setChecked(false);
            } else {
                shoppingcar_check_box_all.setChecked(true);
            }
            reflash();
            return convertView;
        }

    }

    //刪除物品
    private void delete(final Goods goods, final ArrayList<Goods> datas, final int position) {
        pb.setVisibility(View.VISIBLE);
        //刪除商品
        OkHttpUtils.get().headers(CommonUtils.getHttpHeadParams(getApplication())).url(getUrl(Api.shoppingCarDelete) + "?cart_id=" + goods.getCart_id()).build().execute(new DefaultStringCallBack() {
            @Override
            public void onResponse(String response) {
                pb.setVisibility(View.GONE);
                try {
                    int code = new JSONObject(response).getInt("code");
                    if (code == Api.RESPONSE_CODE_SUCESS) {
                        Toast.makeText(getApplication(), "刪除成功!", Toast.LENGTH_SHORT).show();
                        datas.remove(position);
                        if (datas.size() == 0) {
                            shoppingcar_subtitle.setText("編輯");
                            loadData();
                        }
                        if (selectGoods.contains(goods)) {
                            ArrayList<Goods> g = new ArrayList<>();
                            g.add(goods);
                            EventBus.getDefault().post(new EBMassage(g, 2));
                        }
                        reflash();
                    } else {
                        Toast.makeText(getApplication(), "刪除出錯,錯誤代碼:" + code, Toast.LENGTH_SHORT).show();
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onError(Call call, Exception e) {
                pb.setVisibility(View.GONE);
                Toast.makeText(getApplication(), "刪除商品錯誤:" + e.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == 110) {
            selectGoods.clear();
            itemIsChecked.clear();
            subIsChecked.clear();
            listState.clear();
            shoppingcar_check_box_all.setChecked(false);
            shoppingcar_txtv_submit.setText("結算(" + selectGoods.size() + ")");
            shoppingcar_txtv_tollPrice.setText("¥0.00");
            shoppingcar_txtv_tax.setText("(含關稅:¥0,不含運費)");
            reflash();
        }
    }

    //保存所有的Adapter,用於刷新數據
    private ArrayList<BaseAdapter> adapterList = new ArrayList<>();

    //全選按鈕
    private void selectAllB() {
        boolean checked = shoppingcar_check_box_all.isChecked();
        for (int i = 0; i < itemIsChecked.size(); i++) {
            HashMap<String, HashMap<Integer, Boolean>> arrayLists = itemIsChecked.get(i);
            Iterator<Map.Entry<String, HashMap<Integer, Boolean>>> iterator1 = arrayLists.entrySet().iterator();
            while (iterator1.hasNext()) {
                HashMap<Integer, Boolean> booleen = iterator1.next().getValue();
                Iterator<Map.Entry<Integer, Boolean>> iterator = booleen.entrySet().iterator();
                while (iterator.hasNext()) {
                    Map.Entry<Integer, Boolean> next = iterator.next();
                    next.setValue(checked);
                }
            }
        }
        for (int i = 0; i < subIsChecked.size(); i++) {
            ArrayList<Boolean> booleen = subIsChecked.get(i);
            for (int j = 0; j < booleen.size(); j++) {
                booleen.set(j, shoppingcar_check_box_all.isChecked());
            }
        }
        for (int i = 0; i < listState.size(); i++) {
            listState.put(wareHouseList.get(i), shoppingcar_check_box_all.isChecked());
        }
        if (checked) {
            for (int i = 0; i < cGoodsList.size(); i++) {
                List<ArrayList<Goods>> arrayLists = cGoodsList.get(i);
                for (int j = 0; j < arrayLists.size(); j++) {
                    ArrayList<Goods> goodses = arrayLists.get(j);
                    EventBus.getDefault().post(new EBMassage(goodses, 1));
                }
            }
        } else {
            for (int i = 0; i < cGoodsList.size(); i++) {
                List<ArrayList<Goods>> arrayLists = cGoodsList.get(i);
                for (int j = 0; j < arrayLists.size(); j++) {
                    ArrayList<Goods> goodses = arrayLists.get(j);
                    EventBus.getDefault().post(new EBMassage(goodses, 2));
                }
            }
        }
    }

    //提交商品
    private void submit() {
        if (selectGoods.size() == 0) {
            Toast.makeText(getApplication(), "請選擇商品", Toast.LENGTH_SHORT).show();
            return;
        }
        pb.setVisibility(View.VISIBLE);
        HashMap<String, ArrayList> params = new HashMap<>();
        ArrayList<HashMap> list = new ArrayList<>();
        params.put("buy_list", list);
        for (int i = 0; i < selectGoods.size(); i++) {
            Goods goods = selectGoods.get(i);
            HashMap<String, String> goodsMap = new HashMap<>();
            goodsMap.put("sku_id", goods.getSku_id() + "");
            goodsMap.put("buy_num", goods.getBuy_num() + "");
            goodsMap.put("cart_id", goods.getCart_id() + "");
            goodsMap.put("comp_id", goods.getComp_id() + "");
            goodsMap.put("wh_code", goods.getWh_code());
            list.add(goodsMap);
        }
        OkHttpUtils
                .postString()
                .headers(CommonUtils.getHttpHeadParams(getApplication()))
                .url(getUrl(Api.preDeal))
                .content(JsonUtils.getInstance().obj2Json(params))
                .build()
                .execute(new DefaultStringCallBack() {
                    @Override
                    public void onError(Call call, Exception e) {
                        pb.setVisibility(View.GONE);
                        Toast.makeText(getApplication(), "請求出錯,錯誤信息:" + e.getMessage(), Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onResponse(String response) {
                        pb.setVisibility(View.GONE);
                        //跳轉到訂單確認頁面
                        try {
                            int code = new JSONObject(response).getInt("code");
                            if (code == 200) {
                                Intent intent = new Intent(getActivity(), VerifyOrder.class);
                                intent.putExtra("preStr", response);
                                startActivityForResult(intent, 110);
                            } else {
                                ResponseUtils.checkToken(getApplication(), code);
                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                });
    }

    //刷新數據
    private void reflash() {
        for (int i = 0; i < adapterList.size(); i++) {
            adapterList.get(i).notifyDataSetChanged();
        }
    }

    //編輯物品的數量
    private void editNumb(Goods g, int numb) {
        pb.setVisibility(View.VISIBLE);
        isEdited = true;
        HashMap<String, String> params = new HashMap<>();
        params.put("cart_id", g.getCart_id() + "");
        params.put("buy_num", numb + "");
        params.put("sku_id", g.getSku_id() + "");
        params.put("comp_id", g.getComp_id() + "");
        params.put("wh_code", g.getWh_code() + "");
        OkHttpUtils.get().headers(CommonUtils.getHttpHeadParams(getApplication())).url(getUrl(Api.shoppingCarEdit)).params(params).build().execute(new DefaultStringCallBack() {
            @Override
            public void onError(Call call, Exception e) {
                pb.setVisibility(View.GONE);
                Toast.makeText(getApplication(), "編輯數量出錯,錯誤信息:" + e.getMessage(), Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onResponse(String response) {
                pb.setVisibility(View.GONE);
                Toast.makeText(getApplication(), "編輯數量成功!", Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public void onResume() {
        EventBus.getDefault().register(this);
        super.onResume();
        loadData();
    }

    @Override
    public void onPause() {
        super.onPause();
        EventBus.getDefault().unregister(this);
    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章