一:Activity
package com.baidu.day100.view; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.View; 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.baidu.day100.R; import com.baidu.day100.adapter.ExpandAdapter; import com.baidu.day100.bean.CartBean; import com.baidu.day100.presenter.CartPresenter; import java.util.ArrayList; import java.util.List; public class MyCartActivity extends AppCompatActivity implements View.OnClickListener,ICartView { private ImageView iv_back; private ExpandableListView expandableListView; private CheckBox cart_check; private TextView cart_xuan; private TextView cart_price; private Button cart_xiaban; private CartPresenter cartPresenter; private ExpandAdapter expandAdapter; private List<CartBean.DataBean> list=new ArrayList<>(); private boolean ischecked = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_my_cart); initView(); setClick(); } private void setClick() { iv_back.setOnClickListener(this); cart_check.setOnClickListener(this); cart_xiaban.setOnClickListener(this); //设置父条目不可点击 expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { return true;//返回true,表示不可点击 } }); } private void initView() { iv_back=findViewById(R.id.cart_back); expandableListView=findViewById(R.id.cart_expand); //设置属性去掉默认向下的箭头 expandableListView.setGroupIndicator(null); cart_check=findViewById(R.id.cart_check); cart_xuan=findViewById(R.id.cart_xuan); cart_price=findViewById(R.id.cart_price); cart_xiaban=findViewById(R.id.cart_xiaban); cartPresenter=new CartPresenter(this); cartPresenter.setDatas(); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.cart_back: finish(); break; case R.id.cart_check: //全选 quanxuan(); break; case R.id.cart_xiaban: break; } } private void quanxuan() { Toast.makeText(MyCartActivity.this,"点击了",Toast.LENGTH_SHORT).show(); if (ischecked) { expandAdapter.setIsSelect(ischecked); ischecked = false; cart_check.setChecked(ischecked); } else { expandAdapter.setIsSelect(ischecked); ischecked = true; cart_check.setChecked(ischecked); } } @Override public void onSuccess(final CartBean cartBean) { list = cartBean.getData(); runOnUiThread(new Runnable() { @Override public void run() { expandAdapter = new ExpandAdapter(MyCartActivity.this, cartBean.getData(), new ExpandAdapter.Callback() { @Override public void GoodCartsLitenster(int countyMoney, int countsNum) { cart_price.setText("小计" + countyMoney); cart_xuan.setText("已选(" + countsNum + ")"); } }); expandableListView.setAdapter(expandAdapter); //设置子条目不点击展示 int count = expandableListView.getCount(); for (int i=0;i<count;i++){ expandableListView.expandGroup(i); } } }); } @Override public void onError(int code) { } @Override protected void onDestroy() { cartPresenter.onDestroys(); super.onDestroy(); } }
二:adapter
package com.baidu.day100.adapter; import android.content.Context; import android.util.Log; 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.baidu.day100.R; import com.baidu.day100.bean.CartBean; import com.baidu.day100.view.SumLayout; import com.bumptech.glide.Glide; import java.util.List; public class ExpandAdapter extends BaseExpandableListAdapter { private static final String TAG = ExpandAdapter.class.getSimpleName(); private Context context; private List<CartBean.DataBean> list; private Callback callback; //选中的货物的钱数 private int countsMoney ; //选中的货物的个数 private int countsNum ; public void setCallback(Callback callback) { this.callback = callback; } public ExpandAdapter(Context context, List<CartBean.DataBean> list,Callback callback) { this.context = context; this.list = list; this.callback=callback; } //将所有的单选框设为全选或全不选 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(0); } else { l.setSelected(1); } } } notifyDataSetChanged(); } /** * 统计小计 获取选中的个数 */ public void getcountsMoneyAndNum() { countsMoney = 0; countsNum = 0; if (list == null) { return; } for (CartBean.DataBean li : list) { List<CartBean.DataBean.ListBean> list1 = li.getList(); for (CartBean.DataBean.ListBean l : list1) { if (l.getSelected() == 1) { countsMoney += (l.getNum() * l.getBargainPrice()); countsNum += l.getNum(); } } } } @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(context).inflate(R.layout.group_item,parent,false); groupViewHolder=new GroupViewHolder(); groupViewHolder.textView=convertView.findViewById(R.id.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(context).inflate(R.layout.child_item,parent,false); childViewHolder=new ChildViewHolder(); childViewHolder.checkBox=convertView.findViewById(R.id.child_box); childViewHolder.imageView=convertView.findViewById(R.id.child_img); childViewHolder.tvTitile=convertView.findViewById(R.id.child_title); childViewHolder.tvPrice=convertView.findViewById(R.id.child_price); childViewHolder.sumLayout = convertView.findViewById(R.id.cart_childe_item_sumlayout); convertView.setTag(childViewHolder); }else { childViewHolder= (ChildViewHolder) convertView.getTag(); } 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(context).load(listBeans.get(childPosition).getImages().split("\\|")[0]).into(childViewHolder.imageView); childViewHolder.tvTitile.setText(listBeans.get(childPosition).getTitle()); //因为是double类型所以要加“”,基本类中字段中有小数点都改成double类型 childViewHolder.tvPrice.setText(listBeans.get(childPosition).getPrice()+""); final ChildViewHolder finalMyChildView = childViewHolder; /** * 自定义加减框控件点击事件 */ childViewHolder.sumLayout.setOnDownSumLayoutListener(new SumLayout.OnDownSumLayouListener() { @Override public void onDownSumLayout() { //得到改变后的购买数量 String count = finalMyChildView.sumLayout.getCount(); //转为int型 int i = Integer.parseInt(count); //并重新给子条目数据的购买数量赋值 list.get(groupPosition).getList().get(childPosition).setNum(i); //刷新适配器,使显示器上的值改变 notifyDataSetChanged(); } }); childViewHolder.checkBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int selected = list.get(groupPosition).getList().get(childPosition).getSelected(); if (selected == 0) { list.get(groupPosition).getList().get(childPosition).setSelected(1); } else if (selected == 1) { list.get(groupPosition).getList().get(childPosition).setSelected(0); } notifyDataSetChanged(); } }); return convertView; } @Override public boolean isChildSelectable(int groupPosition, int childPosition) { return true; } @Override public void notifyDataSetChanged() { super.notifyDataSetChanged(); getcountsMoneyAndNum(); callback.GoodCartsLitenster(countsMoney,countsNum); } public class GroupViewHolder{ TextView textView; } public class ChildViewHolder{ CheckBox checkBox; ImageView imageView; TextView tvTitile; TextView tvPrice; SumLayout sumLayout; } public interface Callback { void GoodCartsLitenster(int countyMoney, int countsNum); } }