一:适配器
package com.mjd.imitate_jd.adapter; import android.view.LayoutInflater; 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.mjd.imitate_jd.R; import com.mjd.imitate_jd.app.MyApp; import com.mjd.imitate_jd.bean.CartBean; import com.mjd.imitate_jd.utils.SumLayout; import java.util.List; /** *@date: 2018/8/16 0016 *@author: 老街旧人 *@Description: bargainPrice和price改为double类型 *@version: **/ public class CartExpandAdapter extends BaseExpandableListAdapter { private List<CartBean.DataBean> list; private Callback callback; private int goodsMoney,goodsNum; public void setCallback(Callback callback) { this.callback = callback; } public CartExpandAdapter(List<CartBean.DataBean> list,Callback callback) { this.list = list; this.callback=callback; } /** * 统计小计 获取选中的个数 */ public void getcountsMoneyAndNum(){ goodsMoney=0; goodsNum=0; if (list==null){ return; }else { for (CartBean.DataBean li:list) { List<CartBean.DataBean.ListBean> l = li.getList(); for (CartBean.DataBean.ListBean l1:l) { //判断只有复选框选中时才计算 if (l1.getSelected()==1){ goodsNum+=l1.getNum(); goodsMoney+=(l1.getNum()*l1.getBargainPrice()); } } } } } //将所有的单选框设为全选或全不选 public void setIsSelect(boolean ischecked){ for (CartBean.DataBean li:list) { List<CartBean.DataBean.ListBean> list1 = li.getList(); for (CartBean.DataBean.ListBean l:list1) { if (ischecked){ l.setSelected(1); }else { l.setSelected(0); } } } notifyDataSetChanged(); } @Override public int getGroupCount() { return list.size(); } @Override public int getChildrenCount(int groupPosition) { return list.get(groupPosition).getList().size(); } @Override public Object getGroup(int groupPosition) { return list.get(groupPosition); } @Override public Object getChild(int groupPosition, int childPosition) { return list.get(groupPosition).getList().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 true; } @Override public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { GroupViewHolder groupViewHolder=null; if(convertView==null){ convertView=LayoutInflater.from(MyApp.getContext()).inflate(R.layout.cart_group_item,parent,false); groupViewHolder=new GroupViewHolder(); groupViewHolder.textView=convertView.findViewById(R.id.cart_group_title); convertView.setTag(groupViewHolder); }else{ groupViewHolder= (GroupViewHolder) convertView.getTag(); } groupViewHolder.textView.setText(list.get(groupPosition).getSellerName()); return convertView; } @Override public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { ChildViewHolder childViewHolder=null; if (convertView==null){ convertView=LayoutInflater.from(MyApp.getContext()).inflate(R.layout.cart_child_item,parent,false); childViewHolder=new ChildViewHolder(); childViewHolder.checkBox=convertView.findViewById(R.id.cart_child_box); childViewHolder.imageView=convertView.findViewById(R.id.cart_child_img); childViewHolder.tvTitile=convertView.findViewById(R.id.cart_child_title); childViewHolder.tvPrice=convertView.findViewById(R.id.cart_child_price); childViewHolder.tvJian=convertView.findViewById(R.id.cart_jian); childViewHolder.tvJia=convertView.findViewById(R.id.cart_jia); childViewHolder.tvNum=convertView.findViewById(R.id.cart_sum); convertView.setTag(childViewHolder); }else { childViewHolder= (ChildViewHolder) convertView.getTag(); } final List<CartBean.DataBean.ListBean> listBeans = this.list.get(groupPosition).getList(); //默认显示复选框是否选中 int selected = listBeans.get(childPosition).getSelected(); if(selected==1){ childViewHolder.checkBox.setChecked(true); }else{ childViewHolder.checkBox.setChecked(false); } Glide.with(MyApp.getContext()).load(listBeans.get(childPosition).getImages().split("\\|")[0]).into(childViewHolder.imageView); childViewHolder.tvTitile.setText(listBeans.get(childPosition).getTitle()); //设置默认的数量 childViewHolder.tvNum.setText(listBeans.get(childPosition).getNum()+""); //因为是double类型所以要加“”,基本类中字段中有小数点都改成double类型 childViewHolder.tvPrice.setText(listBeans.get(childPosition).getBargainPrice()+""); //避免点击字条目中的加减号选中或是取消字条目的复选框 childViewHolder.checkBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int selected1 = listBeans.get(childPosition).getSelected(); if (selected1==0){ listBeans.get(childPosition).setSelected(1); }else if (selected1==1){ listBeans.get(childPosition).setSelected(0); } //刷新适配器,使显示器上的值改变 notifyDataSetChanged(); } }); //购物车减 childViewHolder.tvJian.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int num = listBeans.get(childPosition).getNum(); if (num>0){ num--; listBeans.get(childPosition).setNum(num); } //刷新适配器,使显示器上的值改变 notifyDataSetChanged(); } }); //购物车加 childViewHolder.tvJia.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int num = listBeans.get(childPosition).getNum(); num++; listBeans.get(childPosition).setNum(num); //刷新适配器,使显示器上的值改变 notifyDataSetChanged(); } }); return convertView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } public class GroupViewHolder{ TextView textView; } public class ChildViewHolder{ CheckBox checkBox; ImageView imageView; TextView tvTitile; TextView tvPrice; TextView tvJian; TextView tvNum; TextView tvJia; } public interface Callback{ void buyGoodsSumListener(int goodsMoney,int goodsNum); } @Override public void notifyDataSetChanged() { super.notifyDataSetChanged(); getcountsMoneyAndNum(); callback.buyGoodsSumListener(goodsMoney,goodsNum); } }
二:购物车页面
package com.mjd.imitate_jd.fragment; import android.os.Bundle; 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.ImageView; import android.widget.TextView; import android.widget.Toast; import com.mjd.imitate_jd.R; import com.mjd.imitate_jd.adapter.CartExpandAdapter; import com.mjd.imitate_jd.app.MyApp; import com.mjd.imitate_jd.base.BaseFragment; import com.mjd.imitate_jd.bean.CartBean; import com.mjd.imitate_jd.mvp.car.presenter.CarPresenter; import com.mjd.imitate_jd.mvp.car.view.ICarView; import com.mjd.imitate_jd.utils.UserManage; /** * A simple {@link Fragment} subclass. */ public class CarFragment extends BaseFragment implements ICarView, View.OnClickListener { private ImageView cart_iv_back; private ExpandableListView cart_expand; private CheckBox cart_check; private TextView cart_tv_xuan,cart_tv_price; private Button cart_btn_xiaban; private CarPresenter carPresenter; private String uid; private String token="1"; private CartExpandAdapter cartExpandAdapter; private boolean ischecked=true; public CarFragment() { // Required empty public constructor } @Override protected void initListener() { cart_check.setOnClickListener(this); cart_btn_xiaban.setOnClickListener(this); //设置父条目不可点击 cart_expand.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { return true; } }); } @Override protected void initData() { carPresenter=new CarPresenter(this); uid = UserManage.getInstance().getUserInfo(MyApp.getContext()).getUid(); carPresenter.getCart(uid,token); } @Override protected void initViews(View view) { cart_iv_back=view.findViewById(R.id.cart_iv_back); cart_expand=view.findViewById(R.id.cart_expand); cart_check=view.findViewById(R.id.cart_check); cart_tv_xuan=view.findViewById(R.id.cart_tv_xuan); cart_tv_price=view.findViewById(R.id.cart_tv_price); cart_btn_xiaban=view.findViewById(R.id.cart_btn_xiaban); //设置属性去掉默认向下的箭头 cart_expand.setGroupIndicator(null); } @Override protected int privideLayoutId() { return R.layout.fragment_car; } @Override public void OnSuccess(CartBean cartBean) { Toast.makeText(MyApp.getContext(),""+cartBean.getMsg(),Toast.LENGTH_SHORT).show(); cartExpandAdapter = new CartExpandAdapter(cartBean.getData(), new CartExpandAdapter.Callback() { @Override public void buyGoodsSumListener(int goodsMoney, int goodsNum) { cart_tv_xuan.setText("数量:"+goodsNum); cart_tv_price.setText("小计:"+goodsMoney); } }); cart_expand.setAdapter(cartExpandAdapter); //设置子条目不点击展示 int count = cart_expand.getCount(); for (int i = 0; i < count; i++) { cart_expand.expandGroup(i); } } @Override public void onClick(View v) { switch (v.getId()){ case R.id.cart_check: quanxuan(); break; case R.id.cart_btn_xiaban: break; } } private void quanxuan() { if (ischecked){ cartExpandAdapter.setIsSelect(ischecked); cart_check.setChecked(ischecked); ischecked=false; }else { cartExpandAdapter.setIsSelect(ischecked); cart_check.setChecked(ischecked); ischecked=true; } } }
加减框布局:
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle"> <stroke android:width="0.1dp" android:color="#000000"></stroke> <size android:width="25dp" android:height="15dp"></size> </shape>
<LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_alignBottom="@id/cart_child_img" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/jian" android:id="@+id/cart_jian" android:background="@drawable/sumbgcolor" android:gravity="center" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/sum" android:id="@+id/cart_sum" android:background="@drawable/sumbgcolor" android:gravity="center" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/jia" android:id="@+id/cart_jia" android:background="@drawable/sumbgcolor" android:gravity="center" /> </LinearLayout>