package com.example.administrator.xiangmu_jingdong.view.fragment;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.os.Environment;
import android.support.annotation.Nullable;
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.BaseExpandableListAdapter;
import android.widget.CheckBox;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.cache.DiskCache;
import com.example.administrator.xiangmu_jingdong.R;
import com.example.administrator.xiangmu_jingdong.model.bean.GouWuCheBean;
import com.example.administrator.xiangmu_jingdong.presenter.GouWuChePresenter;
import com.example.administrator.xiangmu_jingdong.util.ApiUtil;
import com.example.administrator.xiangmu_jingdong.util.BitmapUtils;
import com.example.administrator.xiangmu_jingdong.view.activity.MainActivity;
import com.example.administrator.xiangmu_jingdong.view.iview.GouWuCheView;
import com.example.administrator.xiangmu_jingdong.view.zidingyi_view.MyExpandListView;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2017/12/5.
*/
public class GuoWuChe_Fragment extends Fragment implements GouWuCheView, View.OnClickListener {
private MyExpandListView expandlistview;
private CheckBox fuxuankuang;
private TextView tv_price;
private TextView tv_num;
private GouWuChePresenter gouWuChePresenter;
//原生大集合
private List<GouWuCheBean.DataBean> databean = new ArrayList<>();
private GouWuChe_ErJiLieBiao_Adapter gouWuChe_erJiLieBiao_adapter;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.guowuche_fragment_layout, container, false);
//二级列表
expandlistview = view.findViewById(R.id.expandlistview);
//全选复选框
fuxuankuang = view.findViewById(R.id.checkbox2);
//总计 总价钱
tv_price = view.findViewById(R.id.tv_price);
//结算
tv_num = view.findViewById(R.id.tv_num);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//购物车Presenter
gouWuChePresenter = new GouWuChePresenter((GouWuCheView) this);
//请求数据
gouWuChePresenter.getDataUrl(ApiUtil.gouWuChe);
fuxuankuang.setOnClickListener(this);
}
@Override
public void onSuccess(GouWuCheBean gouWuCheBean) {
//把数据添加到大集合里面
List<GouWuCheBean.DataBean> data = gouWuCheBean.getData();
databean.addAll(data);
//去掉一级列表箭头
expandlistview.setGroupIndicator(null);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
notifyDataSetChanged();
}
});
}
@Override
public void onError() {
}
//刷新方法
public void notifyDataSetChanged() {
//实例化适配器 内部类
gouWuChe_erJiLieBiao_adapter = new GouWuChe_ErJiLieBiao_Adapter();
expandlistview.setAdapter(gouWuChe_erJiLieBiao_adapter);
//得到二级列表数量
int count = expandlistview.getCount();
for (int i = 0; i <count; i++) {
expandlistview.expandGroup(i);
}
}
//计算数量和价钱的方法
private void sum() {
int num = 0 ;
int price = 0 ;
//变量出数量和价钱
for (GouWuCheBean.DataBean dd : databean){
List<GouWuCheBean.DataBean.ListBean> list = dd.getList();
for (int i=0;i<list.size();i++){
//判断二级列表的是否选中
if(list.get(i).isChildGroupCheck()){
num+=list.get(i).getNum(); ;
price+=list.get(i).getPrice()*list.get(i).getNum();
}
}
}
//设置数量和价钱
tv_num.setText("结算("+num+")");
tv_price.setText("¥"+price+".00");
notifyDataSetChanged();
}
/**
* 全选的复选框的点击事件
* @param view
*/
@Override
public void onClick(View view) {
//判断复选是否选中 如果选中
if(fuxuankuang.isChecked()){
//如果选中的情况下遍历一级列表
for (int i = 0 ; i < databean.size() ; i ++ ){
List<GouWuCheBean.DataBean.ListBean> list = databean.get(i).getList();
//一级列表选中
databean.get(i).setGroupCheck(true);
//再遍历二级列表的复选框 设置成true
for (int y = 0 ;y<list.size();y++){
list.get(y).setChildGroupCheck(true);
}
}
//再计算数量和价钱 刷新
sum();
notifyDataSetChanged();
}else {//如果不选中 遍历一级列表
for (int i = 0 ; i < databean.size() ; i ++ ){
List<GouWuCheBean.DataBean.ListBean> list = databean.get(i).getList();
//一级列表不选中
databean.get(i).setGroupCheck(false);
//再遍历二级列表的复选框 设置成false
for (int y = 0 ;y<list.size();y++){
list.get(y).setChildGroupCheck(false);
}
}
//计算数量和价钱 刷新
sum();
notifyDataSetChanged();
}
}
/**
* 内部类适配器
*/
class GouWuChe_ErJiLieBiao_Adapter extends BaseExpandableListAdapter {
@Override
public int getGroupCount() {
return databean.size();
}
@Override
public int getChildrenCount(int i) {
return databean.get(i).getList().size();
}
@Override
public Object getGroup(int i) {
return databean.get(i);
}
@Override
public Object getChild(int i, int i1) {
return databean.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(int i, boolean b, View view, ViewGroup viewGroup) {
View view1 = View.inflate(getActivity(),R.layout.gouwuche_yijie_liebiao_layout,null);
CheckBox cb_group = view1.findViewById(R.id.cb_group);
if(databean.get(i).isGroupCheck()){
cb_group.setChecked(true);
}else {
cb_group.setChecked(false);
}
TextView tv_group_title = view1.findViewById(R.id.tv_group_title);
//设置商家名字
tv_group_title.setText(databean.get(i).getSellerName());
//复选框的点击事件
cb_group.setOnClickListener(new GroupClickLister(i,cb_group));
return view1;
}
@Override
public View getChildView(int i, int i1, boolean b, View view, ViewGroup viewGroup) {
View v = View.inflate(getActivity(),R.layout.gouwuche_erjiliebiao_adapter_layout,null);
CheckBox cb_child = v.findViewById(R.id.cb_child);
//判断二级列表是否选中
if(databean.get(i).getList().get(i1).isChildGroupCheck()){
cb_child.setChecked(true);
}else {
cb_child.setChecked(false);
}//商品标题
TextView tv_child_title = v.findViewById(R.id.tv_child_title);
ImageView image_child = v.findViewById(R.id.image_child);
TextView tv_price = v.findViewById(R.id.tv_child_price);
//数量减少
TextView text_jian = v.findViewById(R.id.text_jian);
//添加的数量
TextView text_num = v.findViewById(R.id.text_num);
//数量加
TextView text_add = v.findViewById(R.id.text_add);
//设置购买数量
text_num.setText(databean.get(i).getList().get(i1).getNum()+"");
//设置商品名称
tv_child_title.setText(databean.get(i).getList().get(i1).getTitle());
//设置商品价钱
tv_price.setText("¥" + databean.get(i).getList().get(i1).getPrice());
//设置图片 要截取 因为他是一个文件 中间是用丨隔开的
String[] split = databean.get(i).getList().get(i1).getImages().split("\\|");
Glide.with(getActivity())
.load(split[0])
.into(image_child);
//加号 点击加号购买数量添加
text_add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//遍历集合
List<GouWuCheBean.DataBean.ListBean> list = databean.get(i).getList();
//改变当前位置 中商品的数量
list.get(i1).setNum(list.get(i1).getNum()+1);
//判断一下是否选中...计算价格数量
if (list.get(i1).isChildGroupCheck()){
sum();
}
// 刷新的方法
notifyDataSetChanged();
}
});
//数量减少 点击减号购买数量减少
text_jian.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//遍历集合
List<GouWuCheBean.DataBean.ListBean> list = databean.get(i).getList();
//改变当前位置 中商品的数量
if (list.get(i1).getNum()>1){
list.get(i1).setNum(list.get(i1).getNum()-1);
}
//判断一下是否选中...计算价格数量
if (list.get(i1).isChildGroupCheck()){
sum();
}
//刷新
notifyDataSetChanged();
}
});
//二级列表复选框点击事件
cb_child.setOnClickListener(new ChildClickLister(i,i1,cb_child));
return v;
}
@Override
public boolean isChildSelectable(int i, int i1) {
return true;
}
}
/**
* 适配器类
* 一级列表的复选框
*/
class GroupClickLister implements View.OnClickListener{
private int i ;
CheckBox cb_group ;
public GroupClickLister(int i, CheckBox cb_group) {
this.i = i;
this.cb_group = cb_group;
}
@Override
public void onClick(View view) {
//判断是否选中 如果中就true否则false
if(cb_group.isChecked()){
setCheck(true);
}else {
setCheck(false);
//如果有一个没有选中;;;;全选则不选
fuxuankuang.setChecked(false);
}//刷新
notifyDataSetChanged();
}
public void setCheck(boolean check) {
GouWuCheBean.DataBean dataBean = databean.get(i);
List<GouWuCheBean.DataBean.ListBean> list = dataBean.getList();
//一级状态
dataBean.setGroupCheck(check);
//二级状态
for (GouWuCheBean.DataBean.ListBean list1 : list){
list1.setChildGroupCheck(check);
}
//默认给个0
int num = 0 ;
//遍历出大集合长度
for (int i = 0 ; i<databean.size();i++){
//如果一级列表没有选中的情况下就num++
if(!databean.get(i).isGroupCheck()){
num++;
}
}
//判断如果全选中的情况下 全选复选框选上
if(num==0){
fuxuankuang.setChecked(true);
}else {
//否则不选上
fuxuankuang.setChecked(false);
}
sum();
}
}
/**
* 适配器类
* 二级列表的复选框
*
*/
class ChildClickLister implements View.OnClickListener{
private int i ;
private int i1;
private CheckBox cb_child ;
public ChildClickLister(int i, int i1, CheckBox cb_child) {
this.i1 = i1;
this.i = i;
this.cb_child = cb_child;
}
@Override
public void onClick(View view) {
//判断二级列表是否选中
if(cb_child.isChecked()){
databean.get(i).getList().get(i1).setChildGroupCheck(true);
}else {
databean.get(i).getList().get(i1).setChildGroupCheck(false);
}
//二级联动一级状态
setParentCheckFlag();
//判断全选状态
int num = 0 ;
for (int i = 0 ; i<databean.size();i++){
if(!databean.get(i).isGroupCheck()){
num++;
}
}
if(num==0){
fuxuankuang.setChecked(true);
}else {
fuxuankuang.setChecked(false);
}
//计算价格
sum();
}
private void setParentCheckFlag() {
//遍历集合
GouWuCheBean.DataBean dataBean = databean.get(i);
List<GouWuCheBean.DataBean.ListBean> list = dataBean.getList();
for (int i = 0 ; i < list.size();i++){
//判断二级列表里面是否全选中 如果没有全选中的情况下一级列表不选中
if(!list.get(i).isChildGroupCheck()){
dataBean.setGroupCheck(false);
notifyDataSetChanged();
return;
}
if(i == list.size()-1){
dataBean.setGroupCheck(true);
notifyDataSetChanged();
return;
}
}
}
}
}
首页布局
<?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:background="#fff"
>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="51dp"
>
<com.example.administrator.xiangmu_jingdong.view.zidingyi_view.MyExpandListView
android:background="#f00"
android:layout_above="@+id/relv"
android:id="@+id/expandlistview"
android:layout_width="match_parent"
android:layout_height="match_parent"></com.example.administrator.xiangmu_jingdong.view.zidingyi_view.MyExpandListView>
</ScrollView>
<RelativeLayout
android:id="@+id/relv"
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:button="@drawable/select_checkbox"
android:focusable="false"/>
<TextView
android:textColor="#000"
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="18sp"/>
<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="合计 :"
android:textColor="#000" />
<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.00"
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>
</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="100dp"
android:background="#A7B6CD"
android:orientation="horizontal">
<CheckBox
android:id="@+id/cb_group"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:focusable="false"
android:button="@drawable/select_checkbox"
android:layout_marginLeft="10dp"/>
<TextView
android:textColor="#000"
android:id="@+id/tv_group_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="标记"/>
</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="match_parent"
android:gravity="center_vertical"
android:background="#fff"
android:orientation="vertical">
<LinearLayout
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<CheckBox
android:id="@+id/cb_child"
android:layout_width="wrap_content"
android:focusable="false"
android:button="@drawable/select_checkbox"
android:layout_marginTop="30dp"
android:layout_marginLeft="10dp"
android:layout_marginBottom="30dp"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/image_child"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_marginLeft="5dp"
android:src="@mipmap/ic_launcher"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:textColor="#000"
android:id="@+id/tv_child_title"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:text="昵称"
android:layout_marginLeft="5dp"
android:maxLines="2"
android:ellipsize="end"
/>
<LinearLayout
android:layout_alignParentRight="true"
android:layout_alignBottom="@+id/image_good"
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:layout_marginTop="5dp"
android:id="@+id/tv_child_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="价格"
android:textColor="#f00"
android:layout_marginLeft="5dp"/>
<TextView
android:layout_marginTop="3dp"
android:layout_marginLeft="50dp"
android:textColor="#000"
android:id="@+id/text_jian"
android:text="一"
android:padding="5dp"
android:background="@drawable/bian_kuang_line"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:layout_marginTop="3dp"
android:text=""
android:textColor="#000"
android:gravity="center"
android:id="@+id/text_num"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:background="@drawable/bian_kuang_line"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
<TextView
android:layout_marginTop="3dp"
android:textColor="#000"
android:id="@+id/text_add"
android:text="十"
android:padding="5dp"
android:background="@drawable/bian_kuang_line"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
选中和不选中的xml
selector
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/checkbox_checked" android:state_pressed="true" />
<item android:drawable="@drawable/checkbox_checked" android:state_checked="true"></item>
<item android:drawable="@drawable/checkbox_unchecked" />
</selector>
数量的边框shape
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#ffffff" />
<stroke
android:width="0.1dp"
android:color="#000000" />
</shape>