package com.example.goodscar; import android.content.Context; import android.graphics.Paint; import android.util.Log; import android.util.SparseBooleanArray; import android.view.View; import android.view.ViewGroup; import android.widget.BaseExpandableListAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import com.bumptech.glide.Glide; import com.example.goodscar.bean.CartBean; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * Created by 丁 on 2017/12/14. */ public class ExpandableAdapter extends BaseExpandableListAdapter { private List<CartBean.DataBean> data; // group与child的CheckBox状态集合 private Map<Integer, Boolean> group = new HashMap<>(); private Context context; public ExpandableAdapter(List<CartBean.DataBean> data, Context context) { this.data = data; this.context = context; // 初始化GroupCheckBox状态 initMap(); } private void initMap() { for (int i = 0; i < data.size(); i++) { group.put(i, false); } } @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 true; } @Override public View getGroupView(final int i, boolean b, View view, ViewGroup viewGroup) { final GroupHolder holder; if (view == null) { view = View.inflate(context, R.layout.group, null); holder = new GroupHolder(); holder.gBox = view.findViewById(R.id.groupBox); holder.gText = view.findViewById(R.id.sellerName); view.setTag(holder); } else { holder = (GroupHolder) view.getTag(); } // 设置默认值 holder.gBox.setChecked(group.get(i)); holder.gText.setText(data.get(i).getSellerName()); holder.gBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { group.put(i, holder.gBox.isChecked()); if (allGruop()) { MainActivity.setCheckeAll(true); } if (!holder.gBox.isChecked()) { MainActivity.setCheckeAll(false); } checkedChild(i, holder.gBox.isChecked()); MainActivity.setMoney(getSum()); notifyDataSetChanged(); } }); return view; } @Override public View getChildView(final int i, final int i1, boolean b, View view, ViewGroup viewGroup) { Log.d("ExpandableAdapter", "---------"); String[] split = data.get(i).getList().get(i1).getImages().split("\\|"); final ChildHolder holder; if (view == null) { view = View.inflate(context, R.layout.child, null); holder = new ChildHolder(); holder.cBox = view.findViewById(R.id.mCheckbox); holder.cImage = view.findViewById(R.id.goodsIcon); holder.cText1 = view.findViewById(R.id.goodsTitle); holder.cText2 = view.findViewById(R.id.costPrice); view.setTag(holder); } else { holder = (ChildHolder) view.getTag(); } Glide.with(context).load(split[0]).into(holder.cImage); holder.cText1.setText(data.get(i).getList().get(i1).getTitle()); holder.cText2.setText(data.get(i).getList().get(i1).getBargainPrice() + ""); holder.cBox.setChecked(data.get(i).getList().get(i1).isChecked()); holder.cBox.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { data.get(i).getList().get(i1).setChecked(holder.cBox.isChecked()); // 如果二级条目Check状态全为True则当前一级条目状态为True if (allChild(i)) { group.put(i, true); } // 如果二级与一级都为True全选状态设置 if (allChild(i) && allGruop()) { MainActivity.setCheckeAll(true); } // 判断当前点击后的二级状态如果为False当前一级状态为False,全选为False if (!holder.cBox.isChecked()) { group.put(i, holder.cBox.isChecked()); MainActivity.setCheckeAll(false); } MainActivity.setMoney(getSum()); notifyDataSetChanged(); } }); return view; } /* * 一级状态是否全选 * */ private boolean allGruop() { boolean flag = true; for (int s = 0; s < group.size(); s++) { if (!group.get(s)) { flag = false; } } return flag; } /* * 二级状态是否全选 * */ private boolean allChild(int i) { boolean flag = true; for (int s = 0; s < data.get(i).getList().size(); s++) { if (!data.get(i).getList().get(s).isChecked()) { flag = false; } } return flag; } @Override public boolean isChildSelectable(int i, int i1) { return true; } /* 能够得到Adapter中GroupCheckBox状态集合并重新加以设置 */ public Map getGroupMap() { return group; } /* 子条目全选或者全不选 * */ public void checkedChild(int position, boolean checked) { List<CartBean.ListBean> list = data.get(position).getList(); for (int i = 0; i < list.size(); i++) { list.get(i).setChecked(checked); } } // 计算价钱 public double getSum() { double sum = 0; for (int i = 0; i < data.size(); i++) { List<CartBean.ListBean> list = data.get(i).getList(); for (int j = 0; j < list.size(); j++) { if (list.get(j).isChecked()) { sum += list.get(j).getBargainPrice(); } } } return sum; } class GroupHolder { CheckBox gBox; TextView gText; } class ChildHolder { CheckBox cBox; TextView cText1; TextView cText2; ImageView cImage; }}
Activity
package com.example.goodscar; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.ExpandableListView; import android.widget.TextView; import com.example.goodscar.bean.CartBean; import com.example.goodscar.presenter.Presenter; import com.example.goodscar.presenter.PresenterCall; import java.util.List; import java.util.Map; public class MainActivity extends AppCompatActivity implements PresenterCall, View.OnClickListener { private ExpandableListView mExpandable; private static CheckBox mCheckAll; private TextView mPriceView; /** * 结算(0) */ private TextView mPayView; private Presenter presenter; private ExpandableAdapter adapter; private List<Map<Integer, Boolean>> childMap; private static TextView mPrice; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); initPresenter(); } private void initPresenter() { presenter = new Presenter(this); presenter.getCartGoods(); } private void initView() { mExpandable = (ExpandableListView) findViewById(R.id.mExpandable); mCheckAll = (CheckBox) findViewById(R.id.checkAll); mPrice = findViewById(R.id.priceView); mPriceView = (TextView) findViewById(R.id.priceView); mPayView = (TextView) findViewById(R.id.payView); mCheckAll.setOnClickListener(this); } @Override public void getResultData(CartBean cartGoods) { initData(cartGoods); } private void initData(CartBean cartGoods) { adapter = new ExpandableAdapter(cartGoods.getData(), this); mExpandable.setAdapter(adapter); int groupCount = mExpandable.getCount(); for (int i = 0; i < groupCount; i++) { mExpandable.expandGroup(i); } mExpandable.setGroupIndicator(null); } @Override protected void onDestroy() { presenter.onDetory(); super.onDestroy(); } public static void setCheckeAll(boolean b) { mCheckAll.setChecked(b); } public static void setMoney(double money){ mPrice.setText("支付:"+money); } @Override public void onClick(View view) { Map groupMap = adapter.getGroupMap(); for (int i=0;i<groupMap.size();i++){ groupMap.put(i,mCheckAll.isChecked()); adapter.checkedChild(i,mCheckAll.isChecked()); } setMoney(adapter.getSum()); adapter.notifyDataSetChanged(); } }主界面
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.goodscar.MainActivity"> <TextView android:id="@+id/titleView" android:layout_width="match_parent" android:layout_height="40dp" android:gravity="center" android:background="@color/colorAccent" android:textColor="#ffffff" android:text="购物车"/> <ExpandableListView android:id="@+id/mExpandable" android:layout_below="@id/titleView" android:layout_width="match_parent" android:layout_height="match_parent"> </ExpandableListView> <LinearLayout android:layout_width="match_parent" android:layout_height="60dp" android:layout_alignParentBottom="true" android:orientation="horizontal" android:background="#ffffff" android:gravity="center_vertical"> <CheckBox android:id="@+id/checkAll" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp"/> <TextView android:id="@+id/priceView" android:layout_width="wrap_content" android:layout_weight="1" android:layout_height="wrap_content" android:layout_margin="5dp" android:textColor="#ff0000" android:text="支付:0.0"/> <TextView android:id="@+id/payView" android:layout_width="120dp" android:layout_height="match_parent" android:background="#ff0000" android:textColor="#ffffff" android:gravity="center" android:text="结算(0)"/> </LinearLayout> </RelativeLayout>一级列表界面
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="30dp" android:orientation="horizontal" android:gravity="center_vertical"> <CheckBox android:id="@+id/groupBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="5dp"/> <TextView android:id="@+id/sellerName" android:layout_width="wrap_content" android:layout_weight="2" android:layout_height="match_parent" android:layout_margin="5dp"/> </LinearLayout>二级列表界面
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:gravity="center_vertical"> <CheckBox android:id="@+id/mCheckbox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_margin="3dp"/> <ImageView android:id="@+id/goodsIcon" android:layout_width="80dp" android:layout_height="80dp" android:layout_toRightOf="@+id/checkbox"/> <LinearLayout android:layout_toRightOf="@+id/goodsIcon" android:layout_width="match_parent" android:layout_height="80dp" android:orientation="vertical" android:gravity="center_vertical"> <TextView android:id="@+id/goodsTitle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:text="超级本" /> <TextView android:id="@+id/costPrice" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:text="8888" /> </LinearLayout> </LinearLayout>
购物车页面
最新推荐文章于 2024-01-11 10:23:11 发布