Android擬京東ショッピングカート---完全コード(三)

15267 ワード

activity
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    ExpandableListView expandableListView;
    Context context;
    private CheckBox checkall;
    private TextView allpay;
    private TextView allprice;
    private TextView allnum;
    private MyAdapter myAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = MainActivity.this;


        initView();
        initData();


    }

    private void initView() {
        expandableListView = findViewById(R.id.main_expand);
        checkall = findViewById(R.id.main_check);
        allnum = findViewById(R.id.main_numb);
        allprice = findViewById(R.id.main_price);
        allpay = findViewById(R.id.main_pay);
        checkall.setOnClickListener(this);

    }

    private void initData() {
        String url = "https://www.zhaoapi.cn/product/getCarts?uid=71";
        new OkHttpClient.Builder().build().newCall(new Request.Builder().url(url).build()).enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {

            }

            @Override
            public void onResponse(final Call call, Response response) throws IOException {
                final String responses = response.body().string();
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        //    
                        Gson gson = new Gson();
                        MyBean myBean = gson.fromJson(responses, MyBean.class);
                        List data = myBean.getData();
                        myAdapter = new MyAdapter(context, data);
                        expandableListView.setAdapter(myAdapter);
                        //           
                        for (int i = 0; i < data.size(); i++) {
                            expandableListView.expandGroup(i);

                        }
                        //        
                        myAdapter.setOnChangeLinsenter(new MyAdapter.OnChangeLinsenter() {
                            @Override
                            public void shopChange(int i) {
                                boolean shop = myAdapter.isShop(i);
                                myAdapter.shopall(i, !shop);
                                myAdapter.notifyDataSetChanged();
                                refreshall();
                            }

                            @Override
                            public void goodChange(int i, int i1) {
                                myAdapter.goodselect(i, i1);
                                myAdapter.notifyDataSetChanged();
                                refreshall();
                            }

                            @Override
                            public void goodnumChange(int i, int i1, int num) {
                                myAdapter.numshange(i, i1, num);
                                myAdapter.notifyDataSetChanged();
                                refreshall();
                            }
                        });
                    }
                });
            }
        });
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            //         
            case R.id.main_check:
                //              
                boolean allChecked = myAdapter.isAllChecked();
                myAdapter.changeAll(!allChecked);
                //     
                myAdapter.notifyDataSetChanged();
                //         
                refreshall();
                break;
        }
    }

    //                          
    private void refreshall() {
        boolean allChecked = myAdapter.isAllChecked();
        checkall.setChecked(allChecked);

        double allprie = myAdapter.allPrice();
        allprice.setText("   :¥" + allprie);

        int snum = myAdapter.allNum();
        allnum.setText(" " + snum + "   ");
    }
}

adapter
/**
 *     
 *     
 *        (      )
 */
public class MyAdapter extends BaseExpandableListAdapter {

    List data;
    Context context;

    public MyAdapter(Context context, List data) {
        this.context = context;
        this.data = data;
    }

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

    @Override
    public int getChildrenCount(int i) {
        return data.get(i).getList().size();
    }

    @Override
    public Object getGroup(int i) {
        return null;
    }

    @Override
    public Object getChild(int i, int i1) {
        return null;
    }

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

    @Override
    public long getChildId(int i, int i1) {
        return 0;
    }

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

    //    -----  
    @Override
    public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) {
        //  Holder
        GroupViewHolder groupViewHolder = null;
        if (view == null) {
            groupViewHolder = new GroupViewHolder();
            view = View.inflate(context, R.layout.grouplayout, null);
            groupViewHolder.group_checkBox = view.findViewById(R.id.group_check);
            groupViewHolder.group_textView = view.findViewById(R.id.group_name);
            view.setTag(groupViewHolder);
        } else {
            groupViewHolder = (GroupViewHolder) view.getTag();
        }
        //      
        groupViewHolder.group_textView.setText(data.get(i).getSellerName());
        //                   
        boolean shop = isShop(i);
        groupViewHolder.group_checkBox.setChecked(shop);

        /**
         *              
         */
        groupViewHolder.group_checkBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (onChangeLinsenter != null) {
                    onChangeLinsenter.shopChange(i);
                }
            }
        });

        return view;
    }

    //              
    public boolean isShop(int i) {
        //               
        List list = data.get(i).getList();
        for (int j = 0; j < list.size(); j++) {
            if (list.get(j).getSelected() == 0) {
                return false;
            }
        }
        return true;
    }

    //    -----  
    @Override
    public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) {
        ChildViewHolder childViewHolder = null;

        if (view == null) {
            childViewHolder = new ChildViewHolder();
            view = View.inflate(context, R.layout.childlayout, null);
            childViewHolder.child_checkBox = view.findViewById(R.id.child_check);
            childViewHolder.child_image = view.findViewById(R.id.child_image);
            childViewHolder.child_name = view.findViewById(R.id.child_name);
            childViewHolder.child_price = view.findViewById(R.id.child_price);
            childViewHolder.myView = view.findViewById(R.id.child_myview);
            view.setTag(childViewHolder);
        } else {
            childViewHolder = (ChildViewHolder) view.getTag();
        }

        childViewHolder.child_name.setText(data.get(i).getList().get(i1).getTitle());
        double price = data.get(i).getList().get(i1).getPrice();
        String prices = String.valueOf(price);
        childViewHolder.child_price.setText("¥" + prices);
        String images = data.get(i).getList().get(i1).getImages();
        if (images.contains("|")) {
            String[] split = images.split("\\|");
            Picasso.with(context).load(split[0]).into(childViewHolder.child_image);
        } else {
            Picasso.with(context).load(images).into(childViewHolder.child_image);
        }

        //              
        List list = data.get(i).getList();
        childViewHolder.child_checkBox.setChecked(list.get(i1).getSelected() == 1);
        childViewHolder.child_checkBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                onChangeLinsenter.goodChange(i, i1);
            }
        });
        //               
        childViewHolder.myView.setOnNumChange(new MyView.onNumChange() {
            @Override
            public void onNumberChange(int number) {
                onChangeLinsenter.goodnumChange(i, i1, number);
            }
        });

        return view;
    }

    //             
    public void shopall(int i, boolean b) {
        List list = data.get(i).getList();
        for (int j = 0; j < list.size(); j++) {
            list.get(j).setSelected(b ? 1 : 0);
        }
    }

    //             
    public void goodselect(int i, int i1) {
        MyBean.DataBean.ListBean listBean = data.get(i).getList().get(i1);
        listBean.setSelected(listBean.getSelected() == 0 ? 1 : 0);
    }

    //               
    public void numshange(int i, int i1, int number) {
        MyBean.DataBean.ListBean listBean = data.get(i).getList().get(i1);
        listBean.setNum(number);
    }
    //           
    public int allNum() {
        int numa = 0;
        for (int i = 0; i < data.size(); i++) {
            List list = data.get(i).getList();
            for (int j = 0; j < list.size(); j++) {
                if (list.get(j).getSelected() == 1) {
                    int num = list.get(j).getNum();
                    numa += num;
                }
            }
        }

        return numa;
    }
    //         
    public double allPrice() {
        double allpro = 0;
        for (int i = 0; i < data.size(); i++) {
            List list = data.get(i).getList();
            for (int j = 0; j < list.size(); j++) {
                if (list.get(j).getSelected() == 1) {
                    double price = list.get(j).getPrice();
                    int num = list.get(j).getNum();
                    allpro += price * num;
                }
            }
        }
        return allpro;
    }

    //                 
    public boolean isAllChecked() {
        for (int i = 0; i < data.size(); i++) {
            List list = data.get(i).getList();
            for (int j = 0; j < list.size(); j++) {
                if (list.get(j).getSelected() == 0) {
                    return false;
                }
            }
        }
        return true;
    }
    //                 
    public void changeAll(boolean b) {
        for (int i = 0; i < data.size(); i++) {
            List list = data.get(i).getList();
            for (int j = 0; j < list.size(); j++) {
                list.get(j).setSelected(b ? 1 : 0);
            }
        }
    }

    @Override
    public boolean isChildSelectable(int i, int i1) {
        return false;
    }

    //    ViewHolder
    public static class GroupViewHolder {
        CheckBox group_checkBox;
        TextView group_textView;
    }

    //    ViewHolder
    public static class ChildViewHolder {
        CheckBox child_checkBox;
        TextView child_name, child_price;
        ImageView child_image;
        MyView myView;
    }

    OnChangeLinsenter onChangeLinsenter;

    //                 
    public void setOnChangeLinsenter(OnChangeLinsenter onChangeLinsenter) {
        this.onChangeLinsenter = onChangeLinsenter;
    }

    //             
    public interface OnChangeLinsenter {

        void shopChange(int i);

        void goodChange(int i, int i1);

        void goodnumChange(int i, int i1, int num);
    }

}

カスタムビュー
//        
public class MyView extends LinearLayout implements View.OnClickListener {

    TextView tv_sub_view;
    TextView tv_number_view;
    TextView tv_add_view;

    private int number = 1;

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
        tv_number_view.setText(number + "");
    }

    public MyView(Context context) {
        this(context, null);
    }

    public MyView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);

        View inflate = LayoutInflater.from(context).inflate(R.layout.myviewlayout, this);

        tv_sub_view = inflate.findViewById(R.id.dec);
        tv_number_view = inflate.findViewById(R.id.num);
        tv_add_view = inflate.findViewById(R.id.add);
        //      
        tv_sub_view.setOnClickListener(this);
        tv_add_view.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {

        switch (view.getId()) {
            case R.id.dec:
                if (number > 1) {
                    --number;
                    tv_number_view.setText(number + "");
                    if (onNumChange != null) {
                        onNumChange.onNumberChange(number);
                    }
                } else {
                    Toast.makeText(getContext(), "    1", Toast.LENGTH_SHORT).show();
                }
                break;
            case R.id.add:
                ++number;
                tv_number_view.setText(number + "");
                if (onNumChange != null) {
                    onNumChange.onNumberChange(number);
                }
                break;
        }
    }

    onNumChange onNumChange;

    public void setOnNumChange(MyView.onNumChange onNumChange) {
        this.onNumChange = onNumChange;
    }

    public interface onNumChange {
        void onNumberChange(int number);
    }
}

カスタムviewレイアウト