布局
<?xml version="1.0" encoding="utf-8"?> <LinearLayout android:orientation="vertical" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" tools:context=".ui.fragment.FourFragment"> <ExpandableListView android:id="@+id/m_expandable" android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" ></ExpandableListView> <LinearLayout android:gravity="center_vertical" android:layout_width="match_parent" android:layout_height="50dp" android:orientation="horizontal" > <CheckBox android:id="@+id/m_check" android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="10dp" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="全选" /> <LinearLayout android:layout_width="0dp" android:layout_height="wrap_content" android:orientation="vertical" android:layout_marginLeft="20dp" android:layout_weight="1" > <TextView android:id="@+id/m_price" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="总价" android:textColor="#ff3333" /> <TextView android:id="@+id/m_num" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="共计0件" android:textColor="#cccccc" /> </LinearLayout> <Button android:id="@+id/m_jiesuan" android:layout_width="70dp" android:layout_height="50dp" android:background="@color/colorAccent" android:textSize="23dp" android:text="去结算" android:textColor="#ffffff" /> </LinearLayout> </LinearLayout>
//查询购物车 @FormUrlEncoded @POST("product/getCarts") Observable<ResponseBody> getabout(@Field("uid") String uid);
主页面
package com.example.asus.jddemozhangjiangxia.ui.fragment; import android.content.SharedPreferences; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.util.Log; 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 android.widget.Toast; import com.example.asus.jddemozhangjiangxia.R; import com.example.asus.jddemozhangjiangxia.data.bean.GwcBean; import com.example.asus.jddemozhangjiangxia.di.presenter.PresenterGwc; import com.example.asus.jddemozhangjiangxia.di.presenter.contract.IContractGwc; import com.example.asus.jddemozhangjiangxia.ui.adapter.GwcAdapter; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; import butterknife.Unbinder; public class FourFragment extends Fragment implements IContractGwc.IViewGwc ,View.OnClickListener{ @BindView(R.id.m_expandable) ExpandableListView mExpandable; @BindView(R.id.m_check) CheckBox mCheck; @BindView(R.id.m_price) TextView mPrice; @BindView(R.id.m_num) TextView mNum; @BindView(R.id.m_jiesuan) Button mJiesuan; Unbinder unbinder; private IContractGwc.IPresenterGwc iPresenterGwc; private GwcAdapter gwcAdapter; private List<GwcBean.DataBean> data; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_four, container, false); iPresenterGwc = new PresenterGwc(); iPresenterGwc.attData(this); unbinder = ButterKnife.bind(this, view); //initData(); return view; } @Override public void onResume() { super.onResume(); } @Override public void onHiddenChanged(boolean hidden) { super.onHiddenChanged(hidden); if (!hidden){ initData(); } } private void initData() { SharedPreferences sp = getActivity().getSharedPreferences("userInfo", 0); String uid = sp.getString("uid", "0"); if (!uid.equals("0")) { Log.e("sss", "initData: " + uid); iPresenterGwc.infoData(uid); } else { if (data!=null){ data.clear(); gwcAdapter.notifyDataSetChanged(); } Toast.makeText(getActivity(), "请登录", Toast.LENGTH_SHORT).show(); return; } } @Override public void gouNull(String s) { Toast.makeText(getActivity(), s, Toast.LENGTH_SHORT).show(); } @Override public void onDestroyView() { super.onDestroyView(); unbinder.unbind(); } @OnClick({R.id.m_check, R.id.m_jiesuan}) public void onViewClicked(View view) { switch (view.getId()) { case R.id.m_check: boolean allChacked = gwcAdapter.isAllChacked(); gwcAdapter.chageAll(!allChacked); gwcAdapter.notifyDataSetChanged(); refreshall(); break; case R.id.m_jiesuan: break; } } @Override public void showData(GwcBean msg) { data = msg.getData(); gwcAdapter = new GwcAdapter(data, getActivity()); mExpandable.setAdapter(gwcAdapter); for (int i = 0; i < data.size() ; i++) { mExpandable.expandGroup(i); } gwcAdapter.setOnChangeLinsenter(new GwcAdapter.onChangeLinsenter() { @Override public void shopChang(int i) { boolean shop = gwcAdapter.isShop(i); gwcAdapter.shopall(i,!shop); gwcAdapter.notifyDataSetChanged(); refreshall(); } @Override public void goodChang(int i, int i1) { gwcAdapter.goodselect(i,i1); gwcAdapter.notifyDataSetChanged(); refreshall(); } @Override public void goodChang(int i, int i1, int num) { gwcAdapter.numshange(i,i1,num); gwcAdapter.notifyDataSetChanged(); refreshall(); } }); } @Override public void onClick(View view) { switch (view.getId()) { //全选按钮的点击事件 case R.id.m_check: //调用适配器的方法状态 并赋值 boolean allChecked = gwcAdapter.isAllChacked(); gwcAdapter.chageAll(!allChecked); //刷新适配器 gwcAdapter.notifyDataSetChanged(); //调取刷新全选的方法 refreshall(); break; } } private void refreshall() { boolean allChacked = gwcAdapter.isAllChacked(); mCheck.setChecked(allChacked); double allprice = gwcAdapter.allPrice(); mPrice.setText("总价为:¥"+allprice); int sunm=gwcAdapter.allNum(); mNum.setText("共"+sunm+"件商品"); } @Override public void onDestroy() { super.onDestroy(); iPresenterGwc.deleteData(this); } }
adapter适配器
package com.example.asus.jddemozhangjiangxia.ui.adapter; import android.content.Context; 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.example.asus.jddemozhangjiangxia.R; import com.example.asus.jddemozhangjiangxia.data.bean.GwcBean; import com.example.asus.jddemozhangjiangxia.ui.widget.MyView; import com.squareup.picasso.Picasso; import java.util.List; public class GwcAdapter extends BaseExpandableListAdapter { public List<GwcBean.DataBean> data; public Context context; public GwcAdapter(List<GwcBean.DataBean> data, Context context) { this.data = data; this.context = context; } @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 null; } @Override public Object getChild(int i, int i1) { return null; } @Override public long getGroupId(int i) { return 0; } @Override public long getChildId(int i, int i1) { return 0; } @Override public boolean hasStableIds() { return false; } @Override public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) { GroupViewHolder groupHolder = null; if (view == null) { groupHolder = new GroupViewHolder(); view = View.inflate(context, R.layout.grouplayout, null); groupHolder.group_checkbox = view.findViewById(R.id.g_check); groupHolder.group_textview = view.findViewById(R.id.g_text); view.setTag(groupHolder); } else { groupHolder = (GroupViewHolder) view.getTag(); } //赋值商家名称 groupHolder.group_textview.setText(data.get(i).getSellerName()); boolean shop = isShop(i); groupHolder.group_checkbox.setChecked(shop); //点击 接口 groupHolder.group_checkbox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (onChangeLinsenter != null) { onChangeLinsenter.shopChang(i); } } }); return view; } //判断商家的选中状态 进行判断 public boolean isShop(int i) { List<GwcBean.DataBean.ListBean> list = data.get(i).getList(); for (int j = 0; j < list.size(); j++) { if (list.get(j).getSelected() == 0) { return false; } } return true; } @Override public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) { ChildViewHolder childHolder = null; if (view == null) { childHolder = new ChildViewHolder(); view = View.inflate(context, R.layout.childlayout, null); childHolder.child_checkbox = view.findViewById(R.id.c_check); childHolder.child_image = view.findViewById(R.id.c_image); childHolder.child_name = view.findViewById(R.id.c_name); childHolder.child_price = view.findViewById(R.id.c_price); childHolder.myView = view.findViewById(R.id.c_myview); view.setTag(childHolder); } else { childHolder = (ChildViewHolder) view.getTag(); } childHolder.child_name.setText(data.get(i).getList().get(i1).getTitle()); double price1 = data.get(i).getList().get(i1).getPrice(); String price = String.valueOf(price1); childHolder.child_price.setText("¥" + price); String images = data.get(i).getList().get(i1).getImages(); if (images.contains("|")) { String[] split = images.split("\\|"); Picasso.with(context).load(split[0]).into(childHolder.child_image); } else { Picasso.with(context).load(images).into(childHolder.child_image); } List<GwcBean.DataBean.ListBean> list = data.get(i).getList(); childHolder.child_checkbox.setChecked(list.get(i1).getSelected() == 1); childHolder.child_checkbox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onChangeLinsenter.goodChang(i, i1); } }); childHolder.myView.setOnNumChange(new MyView.onNumChange() { @Override public void onNumberChange(int number) { onChangeLinsenter.goodChang(i, i1, number); } }); return view; } //在接口回调后商家使用的方法 public void shopall(int i, boolean b) { List<GwcBean.DataBean.ListBean> list = data.get(i).getList(); for (int j = 0; j < list.size(); j++) { list.get(j).setSelected(b ? 1 : 0); } } //在接口回调后商品使用的方法 public void goodselect(int i, int i1) { GwcBean.DataBean.ListBean listBean = data.get(i).getList().get(i1); listBean.setSelected(listBean.getSelected() == 0 ? 1 : 0); } //在接口回调后数量改变使用的方法 public void numshange(int i, int i1, int number) { GwcBean.DataBean.ListBean listBean = data.get(i).getList().get(i1); listBean.setNum(number); } //得到所有商品数量的方法 public int allNum() { int numa = 0; for (int i = 0; i <data.size() ; i++) { List<GwcBean.DataBean.ListBean> list = data.get(i).getList(); for (int j = 0; j <list.size() ; j++) { if (list.get(j).getSelected()==1){ int num = list.get(j).getNum(); numa+=num; } } } return numa; } //得到所有价格的方法 public double allPrice() { double allpro = 0; for (int i = 0; i <data.size() ; i++) { List<GwcBean.DataBean.ListBean> list = data.get(i).getList(); for (int j = 0; j <list.size(); j++) { if (list.get(j).getSelected()==1){ double price = list.get(j).getPrice(); int num = list.get(j).getNum(); allpro+=price*num; } } } return allpro; } //判断全选按钮并设置对应的处理的方法 public boolean isAllChacked() { for (int i = 0; i < data.size(); i++) { List<GwcBean.DataBean.ListBean> list = data.get(i).getList(); for (int j = 0; j < list.size(); j++) { if (list.get(j).getSelected() == 0) { return false; } } } return true; } //全局全选按钮状态改变之后调取的方法 public void chageAll(boolean b) { for (int i = 0; i < data.size(); i++) { List<GwcBean.DataBean.ListBean> list = data.get(i).getList(); for (int j = 0; j < list.size(); j++) { list.get(j).setSelected(b ? 1 : 0); } } } @Override public boolean isChildSelectable(int i, int i1) { return false; } //设置外层ViewHolder public static class GroupViewHolder { CheckBox group_checkbox; TextView group_textview; } //设置子层ViewHolder public static class ChildViewHolder { CheckBox child_checkbox; TextView child_name, child_price; ImageView child_image; MyView myView; } onChangeLinsenter onChangeLinsenter; //对外开放 调节口 public void setOnChangeLinsenter(GwcAdapter.onChangeLinsenter onChangeLinsenter) { this.onChangeLinsenter = onChangeLinsenter; } //接口 控制商家商品数量 public interface onChangeLinsenter { void shopChang(int i); void goodChang(int i, int i1); void goodChang(int i, int i1, int num); } }