布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="50dp" android:gravity="center" android:text="购物车" android:textColor="#ff3660" android:textSize="25sp" /> <ExpandableListView android:id="@+id/elv" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="50dp" android:layout_alignParentBottom="true" android:background="@android:color/white" android:gravity="center_vertical"> <CheckBox android:id="@+id/checkbox2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:focusable="false" /> <TextView android:layout_width="wrap_content" android:layout_height="50dp" android:layout_centerVertical="true" android:layout_marginLeft="10dp" android:layout_toRightOf="@+id/checkbox2" android:gravity="center_vertical" android:text="全选" android:textSize="20sp" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:text="合计 :" /> <TextView android:id="@+id/tv_price" android:layout_width="wrap_content" android:layout_height="50dp" android:layout_marginLeft="10dp" android:paddingRight="10dp" android:text="0" android:textColor="@android:color/holo_red_light" /> <TextView android:id="@+id/tv_num" android:layout_width="wrap_content" android:layout_height="50dp" android:background="@android:color/holo_red_dark" android:gravity="center" android:padding="10dp" android:text="结算(0)" android:textColor="@android:color/white" /> </LinearLayout> </RelativeLayout> </LinearLayout>
子布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="horizontal" xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:fresco="http://schemas.android.com/tools"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="horizontal"> <CheckBox android:id="@+id/cb_child" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:focusable="false" /> <com.facebook.drawee.view.SimpleDraweeView android:id="@+id/my_image_view" android:layout_width="80dp" android:layout_height="80dp" fresco:placeholderImage="@mipmap/ic_launcher" /> <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:orientation="vertical"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <TextView android:id="@+id/tv_tel" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" android:text="iphone6" /> <TextView android:id="@+id/tv_pri" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:text="¥3000.00" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:gravity="center_vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <Button android:id="@+id/but_delete" android:layout_width="22dp" android:layout_height="22dp" android:background="@drawable/remove" /> <TextView android:id="@+id/et_number" android:layout_width="40dp" android:layout_height="wrap_content" android:gravity="center" android:inputType="number" /> <Button android:id="@+id/but_add" android:layout_width="20dp" android:layout_height="20dp" android:background="@drawable/add" /> </LinearLayout> </LinearLayout> </LinearLayout> <TextView android:id="@+id/tv_del" android:layout_width="40dp" android:layout_height="40dp" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_marginRight="10dp" android:layout_marginTop="25dp" android:gravity="center" android:text="删除" /> </RelativeLayout> </LinearLayout> </LinearLayout>
主页面:
package com.example.com.moni.fragment; import android.content.Context; import android.content.SharedPreferences; 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 com.example.com.moni.R; import com.example.com.moni.abapter.SeeExpandableListAdapter; import com.example.com.moni.bean.SeeBean; import com.example.com.moni.inter.IView; import com.example.com.moni.presenter.SeePresenter; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; /** * Created by 丶未央 on 2018/5/1. */ public class Fragmentfour extends Fragment implements IView<SeeBean>,SeeExpandableListAdapter.ChangeData { @BindView(R.id.elv) ExpandableListView elv; @BindView(R.id.checkbox2) CheckBox checkbox2; @BindView(R.id.tv_price) TextView tvPrice; @BindView(R.id.tv_num) TextView tvNum; Unbinder unbinder; private SeePresenter seePresenter; private int uid; private List<SeeBean.DataBean> listAll = new ArrayList<>(); private SeeExpandableListAdapter adapter; private List<SeeBean.DataBean> data; private List<SeeBean.DataBean.ItemBean> list; @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.four, container, false); unbinder = ButterKnife.bind(this, view); SharedPreferences addShop = getActivity().getSharedPreferences("addShop", Context.MODE_PRIVATE); uid = addShop.getInt("uid", 0); seePresenter = new SeePresenter(this); seePresenter.getData(uid + ""); checkbox2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(checkbox2.isChecked()){ for (int i = 0; i < data.size(); i++) { SeeBean.DataBean dataBean = data.get(i); dataBean.setIscheck(true); for (int j = 0; j < dataBean.getList().size(); j++) { SeeBean.DataBean.ItemBean itemBean = dataBean.getList().get(j); itemBean.setIsscheck(true); } } }else { for (int i = 0; i < data.size(); i++) { SeeBean.DataBean dataBean = data.get(i); dataBean.setIscheck(false); for (int j = 0; j < dataBean.getList().size(); j++) { SeeBean.DataBean.ItemBean itemBean = dataBean.getList().get(j); itemBean.setIsscheck(false); } } } getMoney(); } }); return view; } @Override public void OnSuccess(SeeBean seeBean) { data = seeBean.getData(); listAll.clear(); listAll.addAll(data); adapter = new SeeExpandableListAdapter(getActivity(),listAll); elv.setAdapter(adapter); adapter.setShoping(Fragmentfour.this); for (int i = 0; i < data.size(); i++) { elv.expandGroup(i); } } @Override public void onHiddenChanged(boolean hidden) { getData(); super.onHiddenChanged(hidden); } private void getData() { seePresenter.getData(uid+""); } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); } private void getMoney() { DecimalFormat df = new DecimalFormat("######0.00"); double zon = 0; int num = 0; for (int i = 0; i < listAll.size(); i++) { list = listAll.get(i).getList(); for (int j = 0; j < list.size() ; j++) { if(list.get(j).isIsscheck()){ zon += list.get(j).getNum() * list.get(j).getPrice(); num += list.get(j).getNum(); } } } tvPrice.setText("总价:" + df.format(zon)); tvNum.setText("结算("+num+")"); adapter.notifyDataSetChanged(); } @Override public void jiaNum(int i, int position) { List<SeeBean.DataBean.ItemBean> listone = data.get(i).getList(); int num = listone.get(position).getNum(); num++; listone.get(position).setNum(num); getMoney(); } @Override public void jianNum(int i, int position, Button but) { List<SeeBean.DataBean.ItemBean> listone = data.get(i).getList(); int num = listone.get(position).getNum(); num--; listone.get(position).setNum(num); getMoney(); } @Override public void click(int i,int i1,boolean checked) { data.get(i).getList().get(i1).setIsscheck(checked); getMoney(); } @Override public void groupclick(int i, boolean ischeck) { data.get(i).setIscheck(ischeck); List<SeeBean.DataBean.ItemBean> list = data.get(i).getList(); for (int j = 0; j < list.size(); j++) { if(data.get(i).isIscheck()){ list.get(j).setIsscheck(true); }else{ list.get(j).setIsscheck(false); } } getMoney(); } @Override public void removeMoney() { getMoney(); } }
适配器:
package com.example.com.moni.abapter; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.net.Uri; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.TextView; import com.example.com.moni.R; import com.example.com.moni.bean.SeeBean; import com.facebook.drawee.view.SimpleDraweeView; import java.util.List; /** * Created by 丶未央 on 2018/5/3. */ public class SeeExpandableListAdapter extends BaseExpandableListAdapter{ Context context; List<SeeBean.DataBean> data; List<SeeBean.DataBean.ItemBean> list; public SeeExpandableListAdapter(Context context, List<SeeBean.DataBean> data) { this.context=context; this.data=data; } ChangeData changeData; public void setShoping(ChangeData changeData){ this.changeData = changeData; } @Override public int getGroupCount() { return data.size(); } @Override public int getChildrenCount(int i) { return data.get(i).getList().size(); } @Override public Object getGroup(int i) { return data.get(i); } @Override public Object getChild(int i, int i1) { return data.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 false; } @Override public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) { final GroupViewHolder holder; if (view == null) { holder = new GroupViewHolder(); view = view.inflate(context, R.layout.shouitemone, null); holder.ck = view.findViewById(R.id.cb_parent); holder.name = view.findViewById(R.id.tv_number); view.setTag(holder); } else { holder = (GroupViewHolder) view.getTag(); } final SeeBean.DataBean dataBean = data.get(i); holder.ck.setChecked(dataBean.isIscheck()); // holder.tv_number.setText(dataBean.getTitle()); holder.name.setText(dataBean.getSellerName()); //一级checkbox holder.ck.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { changeData.groupclick(i,holder.ck.isChecked()); } }); return view; } @Override public View getChildView(final int i, final int i1, final boolean b, View view, ViewGroup viewGroup) { final ChildViewHolder holder; if (view == null) { holder = new ChildViewHolder(); view = view.inflate(context,R.layout.shouitemtwo, null); holder.cck = view.findViewById(R.id.cb_child); holder.name = view.findViewById(R.id.tv_tel); holder.num =view.findViewById(R.id.et_number); holder.img = (SimpleDraweeView) view.findViewById(R.id.my_image_view); holder.price = view.findViewById(R.id.tv_pri); holder.rem = view.findViewById(R.id.tv_del); holder.add = view.findViewById(R.id.but_add); holder.delete = view.findViewById(R.id.but_delete); view.setTag(holder); } else { holder = (ChildViewHolder) view.getTag(); } final SeeBean.DataBean.ItemBean datasBean = data.get(i).getList().get(i1); holder.cck.setChecked(datasBean.isIsscheck()); holder.name.setText(datasBean.getTitle()); holder.price.setText("¥"+datasBean.getPrice() ); if(datasBean.getNum() == 1){ holder.delete.setEnabled(false); } else{ holder.delete.setEnabled(true); } holder.num.setText(datasBean.getNum()+""); String images = datasBean.getImages().trim(); String[] split = images.split("[\\|]"); holder.img.setImageURI(Uri.parse(split[0])); //删除 holder.rem.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { list.get(i).setIsscheck(false); changeData.removeMoney(); list.remove(i); notifyDataSetChanged(); } }); builder.setTitle("警告"); builder.setMessage("确定删除嘛?"); builder.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }); builder.show(); } }); //加 holder.add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { changeData.jiaNum(i,i1); } }); //减 holder.delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { changeData.jianNum(i,i1,holder.delete); } }); //二级checkbox holder.cck.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //设置该条目对象里的checked属性值 changeData.click(i,i1,holder.cck.isChecked()); } }); return view; } @Override public boolean isChildSelectable(int i, int i1) { return true; } class GroupViewHolder{ CheckBox ck; TextView name; } class ChildViewHolder{ CheckBox cck; ImageView img; TextView name,price,num,rem; Button add,delete; } public interface ChangeData{ void jiaNum(int i, int i1); void jianNum(int i, int i1, Button but); void click(int i,int i1,boolean ischeck); void groupclick(int i,boolean ischeck); void removeMoney(); } }