Android_二级列表购物车逻辑

二级列表适配器:

package activity.example.com.jindongdemo.Adapter;

import android.content.Context;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.TextView;
import com.bumptech.glide.Glide;
import com.nostra13.universalimageloader.utils.L;

import java.util.List;

import activity.example.com.jindongdemo.Bean.Child;
import activity.example.com.jindongdemo.Bean.Group;
import activity.example.com.jindongdemo.Fragment.ShoppingFragment;
import activity.example.com.jindongdemo.Header.ShopAddDelete;
import activity.example.com.jindongdemo.InterFaca.OnExpandAdapter;
import activity.example.com.jindongdemo.R;

/**
 * Created by 壹颗大金星 on 2017/11/18.
 */

public class ExpandAdapter extends BaseExpandableListAdapter{

    private Context context;
    private List<Group> data1;
    private List<List<Child>> data2;
    private OnExpandAdapter all;
    private ShoppingFragment s;

    public ExpandAdapter(Context context, List<Group> data1, List<List<Child>> data2,OnExpandAdapter all,ShoppingFragment s) {
        this.context = context;
        this.data1 = data1;
        this.data2 = data2;
        this.all=all;
        this.s=s;
    }

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

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

    @Override
    public Object getGroup(int i) {
        return data1.get(i);
    }

    @Override
    public Object getChild(int i, int i1) {
        return data2.get(i).get(i1);
    }

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

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

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

    class ViewHolder{
        CheckBox check;
        TextView tv;
    }
    class ViewHolder2{
        CheckBox check;
        ImageView image;
        TextView tv1,tv2;
        ShopAddDelete ad;
    }


    @Override
    public View getGroupView(final int i, final boolean b, View view, ViewGroup viewGroup) {
        final ViewHolder holder;
        if(view==null){
            holder = new ViewHolder();
            view = View.inflate(context, R.layout.group_item,null);
            holder.check = (CheckBox)view.findViewById(R.id.main_check_all);
            holder.tv = (TextView)view.findViewById(R.id.textView3);
            view.setTag(holder);
        }else{
            holder = (ViewHolder) view.getTag();
        }
        holder.tv.setText(data1.get(i).getName());
        holder.check.setChecked(data1.get(i).isFlag());

        holder.check.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                //Group布尔值变成选中状态
                data1.get(i).setFlag(holder.check.isChecked());
                //遍历Group集合
                for (int i = 0; i < data1.size(); i++) {
                    //如果有一个未选中   全选变成false并跳出
                    if(!data1.get(i).isFlag()){
                        all.onSetAll(false);
                        break;
                    }else{//全部选中 全选变成true
                        all.onSetAll(true);
                    }
                }
                //Child集合布尔值为选中的状态
                for (int j=0;j<data2.get(i).size();j++){
                    data2.get(i).get(j).setFlag(holder.check.isChecked());
                }
                //刷新适配器
                notifyDataSetChanged();
                //调用计算的方法
                s.js();
            }
        });
        return view;
    }



    @Override
    public View getChildView(final int i, final int i1, final boolean b, View view, ViewGroup viewGroup) {
        final ViewHolder2 holder2;
        if(view==null){
            holder2 = new ViewHolder2();
            view = View.inflate(context, R.layout.child_item,null);
            holder2.check = (CheckBox)view.findViewById(R.id.main_check_all);
            holder2.image = (ImageView)view.findViewById(R.id.imageView3);
            holder2.tv1 = (TextView)view.findViewById(R.id.textView4);
            holder2.tv2 = (TextView)view.findViewById(R.id.textView5);
            holder2.ad = (ShopAddDelete)view.findViewById(R.id.ad);
            view.setTag(holder2);
        }else{
            holder2 = (ViewHolder2) view.getTag();
        }
        String images = data2.get(i).get(i1).getImage();
        String[] split = images.split("!");
        Glide.with(context).load(split[0]).into(holder2.image);
        holder2.tv1.setText(data2.get(i).get(i1).getTitle());
        holder2.tv2.setText(data2.get(i).get(i1).getPrice()+"");
        holder2.ad.count.setText(data2.get(i).get(i1).getNum()+"");
        holder2.check.setChecked(data2.get(i).get(i1).isFlag());

        holder2.check.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                //Child布尔值变成选中状态
                data2.get(i).get(i1).setFlag(holder2.check.isChecked());
                //遍历Ghild集合
                for(int i=0;i<data2.size();i++){
                    for(int j=0;j<data2.get(i).size();j++){
                        //如果有一个未选中     全选与商家按钮变成false并跳出
                        if(!data2.get(i).get(j).isFlag()){
                            data1.get(i).setFlag(false);
                            all.onSetAll(false);
                            break;
                        }else{//全部选中  全选与商家按钮变成true
                            data1.get(i).setFlag(true);
                            all.onSetAll(true);
                        }
                    }
                }
                //二次遍历
                for(int i=0;i<data1.size();i++){
                    boolean flag = data1.get(i).isFlag();
                    if(flag){
                        all.onSetAll(true);
                    }else{
                        all.onSetAll(false);
                        break;
                    }
                }
                notifyDataSetChanged();
                //调用计算的方法
                s.js();
            }
        });
        holder2.ad.setOnAddDeleteClick(new ShopAddDelete.OnAddDeleteClickListener() {
            @Override
            public void onAddClick(View v) {
                int number = holder2.ad.getNumber();
                number++;
                holder2.ad.setNumber(number);
                Log.i("TAG",number+"");
                data2.get(i).get(i1).setNum(number);
                notifyDataSetChanged();
                //调用计算的方法
                s.js();
            }

            @Override
            public void onDelClick(View v) {
                int number = holder2.ad.getNumber();
                number--;
                if(number>0){
                    holder2.ad.setNumber(number);
                    data2.get(i).get(i1).setNum(number);
                }
                notifyDataSetChanged();
                //调用计算的方法
                s.js();
            }
        });
        return view;
    }

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


主页面:

package activity.example.com.jindongdemo.Fragment;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ExpandableListView;
import android.widget.TextView;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

import activity.example.com.jindongdemo.Adapter.ExpandAdapter;
import activity.example.com.jindongdemo.Bean.Child;
import activity.example.com.jindongdemo.Bean.ExpandBean;
import activity.example.com.jindongdemo.Bean.Group;
import activity.example.com.jindongdemo.InterFaca.Expand;
import activity.example.com.jindongdemo.InterFaca.OnExpandAdapter;
import activity.example.com.jindongdemo.Presenter.ExpandPresenter;
import activity.example.com.jindongdemo.R;

/**
 * Created by 壹颗大金星 on 2017/11/6.
 */

public class ShoppingFragment extends Fragment implements Expand,OnExpandAdapter {

    private View view;
    private ExpandableListView expand_able_view;
    public CheckBox main_check_all;
    private TextView main_price;
    private TextView main_count;
    private Button btn_buy;
    private ExpandAdapter expandAdapter;
    private List<Group> grouplist = new ArrayList<>();
    private List<List<Child>> childlist = new ArrayList<>();


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        view = inflater.inflate(R.layout.shopping_fragment,container,false);
        return view;
    }

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        //http://120.27.23.105/product/getCarts?uid=100
        initView();
        expandAdapter = new ExpandAdapter(getActivity(),grouplist,childlist,this,this);
        expand_able_view.setAdapter(expandAdapter);
        ExpandPresenter expandPresenter = new ExpandPresenter(this,getActivity());
        expandPresenter.get("http://120.27.23.105/product/getCarts?uid=100");
        main_check_all.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                for(int i=0;i<grouplist.size();i++){
                    grouplist.get(i).setFlag(main_check_all.isChecked());
                }
                for(int i=0;i<childlist.size();i++){
                    for(int j=0;j<childlist.get(i).size();j++){
                        childlist.get(i).get(j).setFlag(main_check_all.isChecked());
                    }
                }
                js();
                expandAdapter.notifyDataSetChanged();
            }
        });
    }

    private void initView() {
        expand_able_view = (ExpandableListView)view.findViewById(R.id.expand_able_view);
        main_check_all = (CheckBox)view.findViewById(R.id.main_check_all);
        main_price = (TextView)view.findViewById(R.id.main_price);
        main_count = (TextView)view.findViewById(R.id.main_count);
        btn_buy = (Button)view.findViewById(R.id.btn_buy);
    }

    @Override
    public void onSuccess(ExpandBean data) {
        List<ExpandBean.DataBean> data2 = data.getData();
        for(int i = 0;i<data2.size();i++){
            grouplist.add(new Group(data2.get(i).getSellerName(),false));
            List<ExpandBean.DataBean.ListBean> list = data2.get(i).getList();
            List<Child> cl = new ArrayList<>();
            for (int j=0;j<list.size();j++){
                cl.add(new Child(false,list.get(j).getTitle(),(float) list.get(j).getPrice(),list.get(j).getImages(),list.get(j).getNum()));
            }
            childlist.add(cl);
        }
        for(int s = 0; s < expandAdapter.getGroupCount(); s++){
            expand_able_view.expandGroup(s);
        }
        expandAdapter.notifyDataSetChanged();
    }

    public void js(){
        double p = 0;
        int s = 0;
        for(int i=0;i<childlist.size();i++){
            for(int j=0;j<childlist.get(i).size();j++){
                if(childlist.get(i).get(j).isFlag()){
                    double price = childlist.get(i).get(j).getPrice();
                    int num = childlist.get(i).get(j).getNum();
                    p+= price * num;
                    s++;
                }
            }
        }
        DecimalFormat df   = new DecimalFormat("######0.00");
        main_price.setText("总价:"+df.format(p));
        main_count.setText("共"+s+"件商品");
    }

    @Override
    public void onSetAll(boolean b) {
        main_check_all.setChecked(b);
    }
}

自定义view:

package activity.example.com.jindongdemo.Header;

import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import activity.example.com.jindongdemo.R;

/**
 * Created by 壹颗大金星 on 2017/11/18.
 */

public class ShopAddDelete extends RelativeLayout{

    public TextView count;

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

    public ShopAddDelete(Context context, AttributeSet attrs) {
        this(context, attrs,0);
    }

    public ShopAddDelete(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        initView(context, attrs, defStyleAttr);
    }

    private OnAddDeleteClickListener listener;

    //对外提供一个点击的回调接口
    public interface OnAddDeleteClickListener{
        void onAddClick(View v);
        void onDelClick(View v);
    }

    public void setOnAddDeleteClick(OnAddDeleteClickListener listener){
        this.listener = listener;
    }

    private void initView(final Context context, AttributeSet attrs, int defStyleAttr) {
        View view = View.inflate(context, R.layout.add_delete, this);
        ImageView delete = (ImageView)view.findViewById(R.id.delete);
        count = (TextView)view.findViewById(R.id.count);
        ImageView add = (ImageView)view.findViewById(R.id.add);
        delete.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                listener.onDelClick(view);
            }
        });
        add.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                listener.onAddClick(view);
            }
        });
    }

    //对外提供设置EditText值的方法
    public void setNumber(int number){
            count.setText(number + "");
    }
    //得到控件原来的值,并转成int类型
    public int getNumber(){
        int number = Integer.parseInt(count.getText().toString().trim());
        return number;
    }


}

一级布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

   <CheckBox
        android:id="@+id/main_check_all"
        android:layout_width="35dp"
        android:layout_height="35dp"
       android:layout_alignParentTop="true"
       android:layout_alignParentLeft="true"
       android:layout_alignParentStart="true" />

    <ImageView
        android:id="@+id/imageView2"
        android:layout_width="35dp"
        android:layout_height="35dp"
        app:srcCompat="@drawable/store"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/main_check_all"
        android:layout_toEndOf="@+id/main_check_all"
        android:layout_marginLeft="14dp"
        android:layout_marginStart="14dp" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="13dp"
        android:layout_marginStart="13dp"
        android:text="TextView"
        android:layout_alignBaseline="@+id/main_check_all"
        android:layout_alignBottom="@+id/main_check_all"
        android:layout_toRightOf="@+id/imageView2"
        android:layout_toEndOf="@+id/imageView2" />

</RelativeLayout>

二级布局:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <CheckBox
        android:id="@+id/main_check_all"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_below="@+id/textView4"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

    <ImageView
        android:id="@+id/imageView3"
        android:layout_width="90dp"
        android:layout_height="90dp"
        app:srcCompat="@mipmap/ic_launcher"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/main_check_all"
        android:layout_toEndOf="@+id/main_check_all" />

    <TextView
        android:id="@+id/textView4"
        android:textSize="15dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:layout_alignParentTop="true"
        android:layout_toRightOf="@+id/imageView3"
        android:layout_toEndOf="@+id/imageView3" />

    <TextView
        android:id="@+id/textView5"
        android:textSize="10dp"
        android:textColor="#c91622"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:layout_below="@+id/main_check_all"
        android:layout_toRightOf="@+id/imageView3"
        android:layout_toEndOf="@+id/imageView3" />

    <activity.example.com.jindongdemo.Header.ShopAddDelete
        android:id="@+id/ad"
        android:layout_width="80dp"
        android:layout_height="30dp"
        android:layout_alignBottom="@+id/imageView3"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

</RelativeLayout>



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值