Android親測可直接用的購物車邏輯

項目中寫到購物車就記錄一下,以後就可以直接拿來用了 方便很多,這裏用到的是ExpandableListView二級列表,可以展示商家和商品

1,

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ExpandableListView
        android:id="@+id/expand"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"></ExpandableListView>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_alignParentBottom="true"
        android:background="#e4919d">
        <CheckBox
            android:id="@+id/all_cb"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:text="全選"/>

        <TextView
            android:id="@+id/all_price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="價格:123"
            android:layout_centerInParent="true"/>
        <TextView
            android:id="@+id/all_num"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_alignParentRight="true"
            android:text="去結算(1)"/>

    </RelativeLayout>
</RelativeLayout>

2,Activity_main

package com.example.lx;
ctivity extends AppCompatActivity implements iView {

    @BindView(R.id.expand)
    ExpandableListView expand;
    @BindView(R.id.all_cb)
    CheckBox allCb;
    @BindView(R.id.all_price)
    TextView allPrice;
    @BindView(R.id.all_num)
    TextView allNum;
    private List<dataBean.DataBean> data = new ArrayList<>();
    private ExpandAdapter adapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        presenterimpl presenterimpl = new presenterimpl(this);
        presenterimpl.setData(contance.data_url, dataBean.class);

        allNum.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent=new Intent(MainActivity.this,Main2Activity.class);
                startActivity(intent);

            }
        });

    }

    @Override
    public void sucess(Object success) {
        final dataBean dataBean = (com.example.lx.dataBean) success;
        Log.d("MydataBean", dataBean + "");
        Toast.makeText(this, "" + dataBean.getMessage(), Toast.LENGTH_SHORT).show();
        data.addAll(dataBean.getData());
        adapter = new ExpandAdapter(this, data);
        expand.setAdapter(adapter);
        expand.setGroupIndicator(null);


        adapter.setAdapterCallback(new ExpandAdapter.adapterCallback() {
            @Override
            public void groupcheck(int groupPosition) {
                boolean b = adapter.groupcheck(groupPosition);
                adapter.groupchecked(groupPosition,!b);
                Buttom();
                adapter.notifyDataSetChanged();
            }

             @Override
            public void childcheck(int groupPosition, int childPosition) {
                 boolean b = adapter.childcheck(groupPosition, childPosition);
                 adapter.childchecked(groupPosition,childPosition,!b);
                 Buttom();
                 adapter.notifyDataSetChanged();

             }

            @Override
            public void setnum(int groupPosition,int childPosition, int num) {
               adapter.setnumed(groupPosition,childPosition,num);
               data.get(groupPosition).getSpus().get(childPosition).setPraise_num(num);
                Buttom();
               adapter.notifyDataSetChanged();
            }
        });
    }

    @Override
    public void error(Object error) {

    }

    @OnClick(R.id.all_cb)
    public void onViewClicked() {
        boolean b = adapter.allcheck();
        adapter.allchecked(!b);
        Buttom();
        adapter.notifyDataSetChanged();
    }
    private void Buttom(){
        float v = adapter.all_price();
        allPrice.setText("合計:"+v);
        float v1 = adapter.all_num();
        allNum.setText("去結算("+v1+")");
    }
}

3,適配器

package com.example.lx;

blic class ExpandAdapter extends BaseExpandableListAdapter {
        private Context context;
        private List<dataBean.DataBean> data;
    
    
        public ExpandAdapter(Context context, List<dataBean.DataBean> data) {
            this.context = context;
            this.data = data;
        }
    
        //
        @Override
        public int getGroupCount() {
            return data.size();
        }
    
        @Override
        public int getChildrenCount(int groupPosition) {
            return data.get(groupPosition).getSpus().size();
        }
    
        @Override
        public Object getGroup(int groupPosition) {
            return null;
        }
    
        @Override
        public Object getChild(int groupPosition, int childPosition) {
            return null;
        }
    
        @Override
        public long getGroupId(int groupPosition) {
            return 0;
        }
    
        @Override
        public long getChildId(int groupPosition, int childPosition) {
            return 0;
        }
    
        @Override
        public boolean hasStableIds() {
            return false;
        }
    
        @Override
        public View getGroupView(final int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
             GroupViewholder holder1=null;
            if(convertView==null)
            {
                holder1 = new GroupViewholder();
                convertView=View.inflate(context,R.layout.group_item,null);
                holder1.group_cb = convertView.findViewById(R.id.group_cb);
                holder1.group_name = convertView.findViewById(R.id.group_name);
                convertView.setTag(holder1);
            }
            else
            {
                holder1 = (GroupViewholder) convertView.getTag();
            }
            holder1.group_name.setText(data.get(groupPosition).getName());
    
    
    
            boolean groupcheck = groupcheck(groupPosition);
            holder1.group_cb.setChecked(groupcheck);
            holder1.group_cb.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    adapterCallback.groupcheck(groupPosition);
                }
            });
    
            return convertView;
        }
    
        @Override
        public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
             ChildViewHolder holder2=null;
            if(convertView==null)
            {
                holder2 = new ChildViewHolder();
                convertView=View.inflate(context,R.layout.child_item,null);
                holder2.child_cb = convertView.findViewById(R.id.child_cb);
                holder2.child_img = convertView.findViewById(R.id.child_img);
                holder2.child_name = convertView.findViewById(R.id.child_name);
                holder2.child_price = convertView.findViewById(R.id.child_price);
                holder2. jia = convertView.findViewById(R.id.jia);
                holder2. jian = convertView.findViewById(R.id.jian);
                holder2. num = convertView.findViewById(R.id.num);
                convertView.setTag(holder2);
            }
            else
            {
                holder2 = (ChildViewHolder) convertView.getTag();
            }
            Glide.with(context).load(data.get(groupPosition).getSpus().get(childPosition).getPic_url()).into(holder2.child_img);
            holder2.child_name.setText(data.get(groupPosition).getSpus().get(childPosition).getName());
            holder2.child_price.setText(data.get(groupPosition).getSpus().get(childPosition).getSkus().get(0).getPrice()+"");
            holder2.num.setText(data.get(groupPosition).getSpus().get(childPosition).getPraise_num()+"");
    
    
            holder2.child_cb.setChecked(data.get(groupPosition).getSpus().get(childPosition).isChildChecked());
            holder2.child_cb.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    adapterCallback.childcheck(groupPosition,childPosition);
                }
            });
    
            holder2.jia.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int praise_num = data.get(groupPosition).getSpus().get(childPosition).getPraise_num();
                    praise_num++;
                    adapterCallback.setnum(groupPosition,childPosition,praise_num);
                }
            });
            holder2.jian.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int praise_num = data.get(groupPosition).getSpus().get(childPosition).getPraise_num();
                    praise_num--;
                    if(praise_num==0)
                    {
                        Toast.makeText(context, "商品不能再少了!", Toast.LENGTH_SHORT).show();
                        return;
                    }
                    adapterCallback.setnum(groupPosition,childPosition,praise_num);
                }
            });
    
    
    
            return convertView;
        }
    
        @Override
        public boolean isChildSelectable(int groupPosition, int childPosition) {
            return false;
        }
    
        class GroupViewholder{
            private CheckBox group_cb;
            private TextView group_name;
        }
    
        class ChildViewHolder{
            private CheckBox child_cb;
            private ImageView child_img;
            private TextView child_name;
            private TextView child_price;
            private TextView jia;
            private TextView jian;
            private TextView num;
        }
    
        //全選反選
        public boolean allcheck(){
            for(int i=0;i<data.size();i++)
            {
                List<dataBean.DataBean.SpusBean> spus = data.get(i).getSpus();
                for(int j=0;j<spus.size();j++)
                {
                    if(!spus.get(j).isChildChecked())
                    {
                        return false;
                    }
                }
            }
           return true;
        }
    
        public void allchecked(boolean b)
        {
            for(int i=0;i<data.size();i++)
            {
                List<dataBean.DataBean.SpusBean> spus = data.get(i).getSpus();
                for(int j=0;j<spus.size();j++)
                {
                    spus.get(j).setChildChecked(b);
                }
            }
        }
    
    
    
        //group的全選反選
        public boolean groupcheck(int GroupPositon){
    
                List<dataBean.DataBean.SpusBean> spus = data.get(GroupPositon).getSpus();
                for(int j=0;j<spus.size();j++)
                {
                    boolean b = spus.get(j).isChildChecked();
                    if(!b)
                    {
                        return false;
                    }
    
                }
            return true;
        }
        public void groupchecked(int GroupPositiopn,boolean b)
        {
                List<dataBean.DataBean.SpusBean> spus = data.get(GroupPositiopn).getSpus();
                for(int j=0;j<spus.size();j++)
                {
                    spus.get(j).setChildChecked(b);
                }
    
        }
    
    
        //child的全選
        public boolean childcheck(int GroupPositon,int ChildPosition){
    
            dataBean.DataBean.SpusBean spusBean = data.get(GroupPositon).getSpus().get(ChildPosition);
            if(spusBean.isChildChecked())
            {
                return  true;
            }
            return false;
        }
    
        public void childchecked(int GroupPositiopn,int ChildPosition,boolean b)
        {
            dataBean.DataBean.SpusBean spusBean = data.get(GroupPositiopn).getSpus().get(ChildPosition);
            spusBean.setChildChecked(b);
    
        }
    
    
    
        //給數量賦值
        public  void  setnumed(int GroupPosition,int ChildPosition,int num)
        {
            dataBean.DataBean.SpusBean spusBean = data.get(GroupPosition).getSpus().get(ChildPosition);
            spusBean.setPraise_num(num);
        }
    
    
        //計算價格
        public float all_price(){
            int allprice=0;
            for(int i=0;i<data.size();i++)
            {
                List<dataBean.DataBean.SpusBean> spus = data.get(i).getSpus();
                for(int j=0;j<spus.size();j++)
                {
                    if(spus.get(j).isChildChecked()==true)
                    {
    
                        allprice+=spus.get(j).getPraise_num() * Float.parseFloat(spus.get(j).getSkus().get(0).getPrice());
                    }
                }
            }
            return  allprice;
        }
    
        //計算總數量
        public float all_num(){
            int allnum=0;
            for(int i=0;i<data.size();i++)
            {
                List<dataBean.DataBean.SpusBean> spus = data.get(i).getSpus();
                for(int j=0;j<spus.size();j++)
                {
                    if(spus.get(j).isChildChecked()==true)
                    {
    
                        allnum+=spus.get(j).getPraise_num();
                    }
                }
            }
            return  allnum;
        }
    
    
    
    
        public interface  adapterCallback{
            void  groupcheck(int groupPosition);
            void  childcheck(int groupPosition, int childPosition);
            void  setnum(int groupPosition,int childPosition,int num);
        }
        private adapterCallback adapterCallback;
    
        public void setAdapterCallback(ExpandAdapter.adapterCallback adapterCallback) {
            this.adapterCallback = adapterCallback;
        }
    }

4,父條目

<CheckBox
    android:id="@+id/group_cb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:focusable="false"/>
<TextView
    android:id="@+id/group_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="你居然開了個呢個"/>

5,子條目

<CheckBox
    android:id="@+id/child_cb"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_vertical"
    />
<ImageView
    android:id="@+id/child_img"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:src="@mipmap/ic_launcher"
    />

<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">

    <TextView
        android:id="@+id/child_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="繪本課改版特好玩顧客不提供"/>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:layout_marginTop="20dp"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/child_price"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="21313"
            android:textColor="#f00"/>

        <TextView
            android:id="@+id/jian"
            android:layout_width="15dp"
            android:layout_height="wrap_content"
            android:background="#ccc"
            android:layout_marginLeft="70dp"
            android:gravity="center"
            android:text="-"/>
        <TextView
            android:id="@+id/num"
            android:layout_width="20dp"
            android:layout_height="wrap_content"
            android:layout_marginLeft="6dp"
            android:gravity="center"
            android:text="0"/>
        <TextView
            android:id="@+id/jia"
            android:layout_width="15dp"
            android:layout_height="wrap_content"
            android:text="+"
            android:layout_gravity="center"
            android:gravity="center"
            android:layout_marginLeft="6dp"
            android:background="#ccc"
            />


    </LinearLayout>


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