Android 二级列表仿京东购物车 《H》
来源:互联网 发布:zealer fix淘宝店 编辑:程序博客网 时间:2024/06/18 04:00
效果图:
所需图片:![](http://img.blog.csdn.net/20171211173531182)
![](http://img.blog.csdn.net/20171211173535972)
![](http://img.blog.csdn.net/20171211173540106)
![](http://img.blog.csdn.net/20171211173545025)
分别是:shop_icon;shopcart_add_red;shopcart_minus_grey;shopcart_minus_red
在敲代码之前需在Bean中手动添加几个属性: num:计算总价 ;
cou:计算选中商品数量默认是 1
oneischeck:一级列表是否被选中
twoischeck:二级列表是否被选中
MainActivity页面
public class ThreeFrgment extends Fragment implements Carview { private View view; private ExpandableListView car_edl; private ImageView shopping_cart_title_img; private TextView shopping_cart_title_edit; private TextView shopping_cart_bottom_Price; private TextView shopping_cart_bottom_jiesuan; private CheckBox shopping_cart_bottom_CheckBox; private List<CarBean.DataBean> list = new ArrayList<CarBean.DataBean>(); private ThreeAdapter adapter; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = inflater.inflate(R.layout.threefragment, container, false); //注册EventBus EventBus.getDefault().register(this); initview(); huoqu(); shopping_cart_bottom_CheckBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //判断全选的状态 adapter.checkALLStatus(shopping_cart_bottom_CheckBox.isChecked()); } }); adapter = new ThreeAdapter(getActivity(), list); car_edl.setAdapter(adapter); //将一级列表的展开标志隐藏 car_edl.setGroupIndicator(null); adapter.notifyDataSetChanged(); return view; } private void huoqu() { ThreePresaenter presaenter = new ThreePresaenter(); presaenter.attchview(this); presaenter.getnews(); } private void initview() { shopping_cart_title_img = (ImageView) view.findViewById(R.id.shopping_cart_title_img);//返回按钮 shopping_cart_title_edit = (TextView) view.findViewById(R.id.shopping_cart_title_edit);//编辑 shopping_cart_bottom_Price = (TextView) view.findViewById(R.id.shopping_cart_bottom_Price);//总价格 shopping_cart_bottom_jiesuan = (TextView) view.findViewById(R.id.shopping_cart_bottom_jiesuan);//结算 shopping_cart_bottom_CheckBox = (CheckBox) view.findViewById(R.id.shopping_cart_bottom_CheckBox);//全选 car_edl = (ExpandableListView) view.findViewById(R.id.car_edl); } @Override public void success(List<CarBean.DataBean> news) { if (news != null) { list.addAll(news); //循环集合 for (int i = 0; i < list.size(); i++) { //将二级列表展开 car_edl.expandGroup(i); } adapter.notifyDataSetChanged(); } } @Override public void failed(Exception e) { Log.d("Car错误:", e.getMessage()); } //接收适配器传过来的值 @Subscribe(threadMode = ThreadMode.MAIN,sticky = true) public void onMessageEvent(boolean event) { //将全选的状态设置为true或者false shopping_cart_bottom_CheckBox.setChecked(event); } //接收适配器传过来的数量和总价 @Subscribe(threadMode = ThreadMode.MAIN,sticky = true) public void onMessageEvent(CountPrice event) { shopping_cart_bottom_jiesuan.setText("结算(" + event.getCount() + ")" + ""); shopping_cart_bottom_Price.setText("总价:¥"+event.getPrice() + ""); } @Override public void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this); }}
注:CountPrice是自定义的一个类存放结算和价格的变量,为了让EventBus发送一个对象;
MainActivity布局页面
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginTop="20dp" android:background="#fff"> <include android:id="@+id/car_title" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:layout_marginLeft="10dp" android:layout_marginRight="15dp" layout="@layout/shoppingcart_title" ></include> <include android:id="@+id/car_bottom" android:layout_width="match_parent" android:layout_height="wrap_content" layout="@layout/shoppingcart_bottom" android:layout_marginLeft="10dp" android:layout_alignParentBottom="true" android:layout_alignParentEnd="true"></include> <ExpandableListView android:id="@+id/car_edl" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_below="@+id/car_title" android:layout_above="@+id/car_bottom" android:layout_centerHorizontal="true"></ExpandableListView></RelativeLayout>shoppingcart_title布局
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="8dp" android:layout_marginTop="20dp" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" > <ImageView android:id="@+id/shopping_cart_title_img" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:src="@drawable/back"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:text="购物车" android:layout_centerHorizontal="true" android:layout_centerVertical="true"/> <TextView android:id="@+id/shopping_cart_title_edit" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="20sp" android:text="编辑" android:layout_alignParentRight="true" android:layout_centerVertical="true"/></RelativeLayout>
shoppingcart_bottom布局
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <CheckBox android:id="@+id/shopping_cart_bottom_CheckBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:textSize="18sp" android:text="全选" android:layout_alignParentStart="true"/> <TextView android:id="@+id/shopping_cart_bottom_Price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="总价:¥0" android:textSize="18sp" android:textColor="#000" android:layout_alignBaseline="@+id/shopping_cart_bottom_CheckBox" android:layout_alignBottom="@+id/shopping_cart_bottom_CheckBox" android:layout_toRightOf="@+id/shopping_cart_bottom_CheckBox" android:layout_marginLeft="50dp" /> <TextView android:layout_width="80dp" android:layout_height="40dp" android:background="#f00" android:gravity="center" android:text="结算(0)" android:textColor="#fff" android:layout_alignParentTop="true" android:layout_alignParentEnd="true" android:id="@+id/shopping_cart_bottom_jiesuan"/></RelativeLayout>
adapter页面 购物车的逻辑
public class ThreeAdapter extends BaseExpandableListAdapter { private Context context; private List<CarBean.DataBean> list; public ThreeAdapter(Context context, List<CarBean.DataBean> list) { this.context = context; this.list = list; } @Override public int getGroupCount() { return list.size(); } @Override public int getChildrenCount(int i) { return list.get(i).getList().size(); } @Override public Object getGroup(int i) { return list.get(i); } @Override public Object getChild(int i, int i1) { return list.get(i).getList().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 true; } @Override public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) { final ViewHolderGroup group; if (view == null) { view = View.inflate(context, R.layout.car_yi, null); group = new ViewHolderGroup(); group.car_yi_text = (TextView) view.findViewById(car_yi_text); group.car_yi_fuxian = (CheckBox) view.findViewById(R.id.car_yi_fuxian); view.setTag(group); } else { group = (ViewHolderGroup) view.getTag(); } final CarBean.DataBean dataBean = list.get(i); group.car_yi_fuxian.setChecked(dataBean.getOneischeck()); group.car_yi_text.setText(dataBean.getSellerName()); //一级列表复选框点击按钮 group.car_yi_fuxian.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //点击改变状态值 dataBean.setOneischeck(group.car_yi_fuxian.isChecked()); //通过一级的是否勾选,改变二级CheckBox状态 dataCheboxZT(i, group.car_yi_fuxian.isChecked()); EventBus.getDefault().postSticky(jiSuan()); //通过判断是否全选,改变全选的状态 QuanxuangZT(listCheckboxQX()); notifyDataSetChanged(); } }); return view; } @Override public View getChildView(final int i, int i1, boolean b, View view, ViewGroup viewGroup) { final ViewHolderChild child; if (view == null) { view = View.inflate(context, R.layout.car_er, null); child = new ViewHolderChild(); child.car_er_img = (ImageView) view.findViewById(R.id.car_er_img);//图片 child.add_del_add = (ImageView) view.findViewById(R.id.add_del_add);//加 child.add_del_del = (ImageView) view.findViewById(R.id.add_del_del);//减 child.add_del_text = (TextView) view.findViewById(R.id.add_del_text);//加减器 child.car_er_jianjie = (TextView) view.findViewById(car_er_jianjie);//简介 child.car_er_jiage = (TextView) view.findViewById(car_er_jiage);//价格 child.car_er_fuxuan = (CheckBox) view.findViewById(R.id.car_er_fuxuan);//二级复选框 view.setTag(child); } else { child = (ViewHolderChild) view.getTag(); } final CarBean.DataBean.ListBean listBean = list.get(i).getList().get(i1); child.car_er_jiage.setText("¥"+listBean.getPrice()); String subhead = listBean.getSubhead(); StringBuffer stringBuffer = new StringBuffer(); if(subhead.length()>45){ subhead = subhead.substring(0, 50); stringBuffer.append(subhead); stringBuffer.append("...."); }else{ stringBuffer.append(subhead); } child.car_er_jianjie.setText(stringBuffer); child.car_er_fuxuan.setChecked(listBean.getTwoischeck()); String images = list.get(i).getList().get(i1).getImages(); String[] split = images.split("\\|"); Glide.with(context).load(split[0]).into(child.car_er_img); //对二级里面的checkBox设置监听 child.car_er_fuxuan.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { //二级的checkBox的点击时改变datasBean的属性 listBean.setTwoischeck(child.car_er_fuxuan.isChecked()); listBean.setCou(1); //计算勾选状态下的价格和数量 EventBus.getDefault().post(jiSuan()); //判断二级的CheckBox是全选,改变一级的checkBox listCheckboxZT(i, dataCheckboxZT(i)); //判断一级的checkbox是否选中,改变全选的状态值 QuanxuangZT(listCheckboxQX()); //刷新适配器 notifyDataSetChanged(); } }); //减法的点击事件 child.add_del_del.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int num = listBean.getCou(); if(num<=2){ child.add_del_del.setImageResource(R.drawable.shopcart_minus_grey); } if (num == 1) { return; } //给控件赋值 child.add_del_text.setText(--num + ""); //给控件赋值以后在赋值给控件本身 listBean.setCou(num); //当点击选中Checkbox的时候 if (child.car_er_fuxuan.isChecked()) { //进行计算赋值传递给主MainActivity进行显示 EventBus.getDefault().postSticky(jiSuan()); } notifyDataSetChanged(); } }); //加的点击事件 child.add_del_add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Toast.makeText(context, "0", Toast.LENGTH_SHORT).show(); int num = listBean.getCou(); ++num; if(num>1){ child.add_del_del.setImageResource(R.drawable.shopcart_minus_red); } //给控件赋值 child.add_del_text.setText(num + ""); //当给控件赋值以后在赋给控件本身 listBean.setCou(num); //当点击选中Checkbox的时候 if (child.car_er_fuxuan.isChecked()) { //进行继续 EventBus.getDefault().postSticky(jiSuan()); } notifyDataSetChanged(); } }); return view; } @Override public boolean isChildSelectable(int i, int i1) { return true; } class ViewHolderGroup { TextView car_yi_text; CheckBox car_yi_fuxian; } class ViewHolderChild { ImageView car_er_img, add_del_add, add_del_del; TextView car_er_jiage; TextView car_er_jianjie; CheckBox car_er_fuxuan; TextView add_del_text; } /*** * 改变一级checkbox的状态 */ private void listCheckboxZT(int i, boolean flag) { CarBean.DataBean dataBean = list.get(i); dataBean.setOneischeck(flag); } /** * 改变全选的状态 */ private void QuanxuangZT(boolean flag) { EventBus.getDefault().postSticky(flag);//将获取的布尔值发送出去 } /** * 改变二级checkbox的状态 */ private void dataCheboxZT(int i, boolean flag) { List<CarBean.DataBean.ListBean> list = this.list.get(i).getList(); for (int j = 0; j < list.size(); j++) { list.get(j).setTwoischeck(flag); } } /** * 判断一级的checkbox是否全部选中 */ private boolean listCheckboxQX() { for (int i = 0; i < list.size(); i++) { boolean b = list.get(i).getOneischeck(); if (!b) { return false; } } EventBus.getDefault().post(jiSuan()); return true; } /** * 判断二级的CheckBox是否全部选中 */ private boolean dataCheckboxZT(int i) { List<CarBean.DataBean.ListBean> list = this.list.get(i).getList(); for (int j = 0; j < list.size(); j++) { if (!list.get(j).getTwoischeck()) { return false; } } return true; } /** * 计算选择中时的价格和数量 */ private CountPrice jiSuan() { int cout = 0; int price = 0; for (int i = 0; i < list.size(); i++) { CarBean.DataBean dataBean = list.get(i); List<CarBean.DataBean.ListBean> datas = dataBean.getList(); for (int j = 0; j < datas.size(); j++) { CarBean.DataBean.ListBean listBean = datas.get(j); if (listBean.getTwoischeck()) { cout += listBean.getCou(); price += listBean.getPrice() * listBean.getCou(); } } } CountPrice countPrice = new CountPrice(); countPrice.setCount(cout); countPrice.setPrice(price); return countPrice; } //=============================================== /** * 全选的时候改变所有的checkbox的状态 */ public void checkALLStatus(boolean flag) { for (int i = 0; i < list.size(); i++) { CarBean.DataBean dataBean = list.get(i); dataBean.setOneischeck(flag); List<CarBean.DataBean.ListBean> datas = dataBean.getList(); for (int j = 0; j < datas.size(); j++) { CarBean.DataBean.ListBean listBean = datas.get(j); listBean.setTwoischeck(flag); } } EventBus.getDefault().postSticky(jiSuan()); notifyDataSetChanged(); }}
一级列表布局:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_vertical" > <CheckBox android:id="@+id/car_yi_fuxian" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <ImageView android:layout_width="20dp" android:layout_height="20dp" android:src="@drawable/shop_icon"/> <TextView android:id="@+id/car_yi_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="50px" android:textSize="18sp" android:text="商品详情"/></LinearLayout>
二级列表布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:gravity="center_vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <CheckBox android:id="@+id/car_er_fuxuan" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <ImageView android:id="@+id/car_er_img" android:layout_width="100dp" android:layout_height="100dp" android:src="@mipmap/ic_launcher"/> <RelativeLayout android:layout_width="match_parent" android:layout_height="100dp" android:orientation="vertical"> <TextView android:id="@+id/car_er_jianjie" android:layout_width="match_parent" android:layout_height="70dp" android:text="商品简介"/> <TextView android:id="@+id/car_er_jiage" android:layout_width="100dp" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:layout_marginLeft="20dp" android:layout_marginBottom="8dp" android:text="¥28.80" android:textColor="#f00" /> <com.bawei.huochangshneg.AddDeleteView android:id="@+id/car_er_add_del" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginEnd="25dp" android:layout_alignTop="@+id/car_er_jiage" android:layout_alignParentEnd="true"> </com.bawei.huochangshneg.AddDeleteView> </RelativeLayout></LinearLayout>
注:AddDeleteView是自定义控件可以使用以下布局代替
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageView android:id="@+id/add_del_del" android:layout_width="20dp" android:layout_height="20dp" android:src="@drawable/shopcart_minus_grey"/> <TextView android:id="@+id/add_del_text" android:layout_width="40dp" android:layout_height="20dp" android:layout_marginLeft="5dp" android:background="@drawable/shopcart_add_btn" android:gravity="center" android:text="1"/> <ImageView android:id="@+id/add_del_add" android:layout_width="20dp" android:layout_height="20dp" android:layout_marginLeft="5dp" android:src="@drawable/shopcart_add_red"/></LinearLayout>
阅读全文
0 0
- Android 二级列表仿京东购物车 《H》
- Android 二级列表购物车
- android二级列表购物车
- Android----仿京东购物车(二级列表,mvp请求数据)
- android二级列表显示购物车
- Android二级列表仿购物车布局
- android 二级列表实现购物车
- android 购物车二级列表实现
- 二级列表购物车
- 购物车二级列表
- 购物车(二级列表)
- 二级列表购物车
- 购物车二级列表
- 购物车二级列表
- 二级列表购物车
- 二级列表购物车
- 购物车二级列表
- 二级列表购物车
- mybatis foreach标签的解释 与常用之处 转自bareheadzzq
- 今天好高兴,开通CSDN
- opencv3 VideoWriter 不能保存视频
- 使用ControllerAdvice获取controller接口@ResponseBody返回值
- 支付宝支付之APP支付接口 服务器端
- Android 二级列表仿京东购物车 《H》
- Ubuntu远程连接其他电脑Ubuntu
- Kerberos简介 —config for users
- No result defined for action cn.xs.studentunion.action.DeptAction and result input
- Spring+Junit4+maven运行测试类报Failed to load ApplicationContext
- Hadoop的Map-side join和Reduce-side join
- 极客密码学(1)——先导篇
- realsense R200在Ubuntu16.04上的安装
- 使用IntelliJ IDEA 15和Maven创建Java Web项目